我有两个模型,模板和状态,通过一对一的关系相关联。国家属于模板,
使用以下迁移创建外键:
public function up()
{
Schema::table(
'templates',
function (Blueprint $table) {
$table->dropColumn('state');
$table->integer('state_id')->unsigned()->index()->nullable();
$table->foreign('state_id')->references('id')->on('template_states');
}
);
}
然后,Template模型类将state字段定义为hasOne关系:
public function state()
{
return $this->hasOne('TemplateState', 'id', 'state_id');
}
和TemplateState模型类定义逆属于bit:
public function template()
{
return $this->belongsTo('Template');
}
在DB中创建状态后,我很难将状态与模板相关联。看一下下面的修补匠:
[1] > $t = Template::find(1);
// object(Template)(
// 'incrementing' => true,
// 'timestamps' => true,
// 'exists' => true
// )
[2] > $t->alias;
// 'travel_journal'
[3] > $s = TemplateState::find(1);
// object(TemplateState)(
// 'incrementing' => true,
// 'timestamps' => true,
// 'exists' => true
// )
[4] > $s->state;
// 'pending'
[5] > $t->state()->save($s);
// object(TemplateState)(
// 'incrementing' => true,
// 'timestamps' => true,
// 'exists' => true
// )
[6] > $t->state->state;
在修补程序的步骤[6],调用$ t-> state->状态,我可以看到没有与这两个模型建立关联,并查看数据库中的state_id模板仍为空。
我无法弄清楚我做错了什么,有人可以帮忙!
答案 0 :(得分:1)
我通过更改以下内容设法让它发挥作用:
州模式:
public function template()
{
return $this->belongsTo('Template');
}
模板模型:
public function state()
{
return $this->hasOne('TemplateState');
}
并将外键添加到TemplateState模型中。
现在,打电话给:
$template->state()->save($state);
工作正常。
答案 1 :(得分:0)
你的关系错了,这就是你所需要的:
// Template model
public function state()
{
return $this->belongsTo('TemplateState', 'state_id');
}
// TemplateState model
public function template()
{
return $this->hasOne('Template', 'state_id');
}