2015-04-05 102 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'));