无法保存hasOne()模型关系


Cannot save hasOne() model relationship

访问者模型:

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()

我做错什么了吗?

这是因为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'));