2016-04-26 58 views
2

基本上,我嘗試更新包含兩個主鍵的表中的一行。主鍵是Trad_idTrad_lang。對於每個不同的行,我想用正確的數據進行更新,但Eloquent會更新具有相同Trad_id的所有行。雄辯地更新所有行

爲什麼雄辯更新所有行?

$tradInt = \Model\Traduction::where('Trad_id', $reference->Trad_id)->where("Trad_lang", "INTERNE")->first(); 
$tradInt->Trad_text = 'ABC'; 
$tradInt->save(); 

$tradExt = \Model\Traduction::where('Trad_id', $reference->Trad_id)->where("Trad_lang", "EXTERNE")->first(); 
$tradExt->Trad_text = 123; 
$tradExt->save(); 

+---------+-----------+-----------+-----------+ 
| Trad_id | Trad_lang | Trad_type | Trad_text | 
+---------+-----------+-----------+-----------+ 
| 1206 | INTERNE |   | 123  | 
| 1206 | EXTERNE |   | 123  | 
| 1206 | FR  |   | 123  | 
+---------+-----------+-----------+-----------+ 
+0

'first()'方法只會返回一個項目,所以你確定它在每個更新語句中更新數據庫中的多行?在更新之前嘗試'dd()'查詢的結果,以便您可以查看正在更新的內容。另外,您的表是否需要複合主鍵?也許這就是導致這個問題的原因? – haakym

回答

1

問題是Laravel不支持組合鍵,並且肯定他們將來不會支持它。因此,解決方案是使用更新查詢:

\Model\Traduction::where('Trad_id', $reference->Trad_id) 
    ->where("Trad_lang", "EXTERNE") 
    ->update(['Trad_text' => 123]); 

下面是這個問題:

https://github.com/laravel/framework/issues/5355

見泰勒爲響應。