2016-04-26 51 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

见泰勒为响应。