2015-04-05 66 views
0

访客模式:无法保存hasOne()模型关系

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

我做错了什么?

+0

与w的关系种类爱给我。一个访问者可能不止一个组,并且一个组可能有很多访问者,这是你正在尝试做什么的? – mininoz 2015-04-05 21:50:35

回答

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'));