Laravel一对一的关系没有关联

时间:2014-05-07 12:07:28

标签: laravel laravel-4 eloquent

我有两个模型,模板和状态,通过一对一的关系相关联。国家属于模板,

使用以下迁移创建外键:

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模板仍为空。

我无法弄清楚我做错了什么,有人可以帮忙!

2 个答案:

答案 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');
}