无法保存hasOne()模型关系

时间:2015-04-05 19:44:40

标签: php laravel

访客模特:

public function group()
{
  return $this->belongsTo('MyApp\Models\VisitorGroup', 'group_id');
}

VisitorGroup模型:

public function visitors()
{
  return $this->hasMany('MyApp\Models\Visitor');
}

那么我正在尝试为一个小组创建一些访问者:

$mygroup = VisitorGroup::whereRaw('name LIKE "%mygroup%"')->first();
foreach(range(1, 10) as $i)
{
  $v = Visitor::create(array('name' => 'Homer simpson'));
  $v->group()->save($mygroup); // HERE trying to add this visitor to the group
}

但是我收到了这个错误:

[BadMethodCallException]
Call to undefined method Illuminate\Database\Query\Builder::save()

我做错了吗?

1 个答案:

答案 0 :(得分:1)

这是因为BelongsTo没有save()方法。但是它有associate()方法,这可能是您正在寻找的方法。并不是说您之后必须明确保存模型:

$v = Visitor::create(array('name' => 'Homer simpson'));
$v->group()->associate($mygroup);
$v->save();

或者您可以在创建保存数据库查询时手动设置外键:

$v = Visitor::create(array('name' => 'Homer simpson', 'group_id' => $mygroup->id));

或者可能是最优雅的方式:

$mygroup->visitors()->create(array('name' => 'Homer simpson'));