Eloquent更新所有行

时间:2016-04-26 08:15:57

标签: php mysql laravel eloquent

基本上,我尝试对包含两个主键的表中的一行进行更新。主键为Trad_idTrad_lang。对于我想要使用正确数据更新的每个不同行,但Eloquent会使用相同的Trad_id更新所有行。

为什么Eloquent会更新所有行?

$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       |
+---------+-----------+-----------+-----------+

1 个答案:

答案 0 :(得分: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

请参阅泰勒的回应。