我有两种模型,即通过一对一关系关联的模板和状态。国家所属的模板,Laravel一对一关系不相关
一个外键使用以下迁移创建:
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');
}
);
}
然后,模板模型类状态字段定义为一个hasOne关系:
public function state()
{
return $this->hasOne('TemplateState', 'id', 'state_id');
}
而TemplateState模型类定义的逆位属于:
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_id仍然为空。
我无法弄清楚我做错了什么,任何人都可以请帮忙!
我在理解你在说我应该让Template属于TemplateState,所以反过来我现在有什么? –
是的,'hasOne' /'hasMany'需要另一个表上的外键,与'belongsTo'相对。 –