基本上,我尝试对包含两个主键的表中的一行进行更新。主键是 Trad_id
和 Trad_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 |
+---------+-----------+-----------+-----------+
最佳答案
问题是 Laravel 不支持复合键,并且肯定他们将来不会支持它。所以解决方案是使用更新查询:
\Model\Traduction::where('Trad_id', $reference->Trad_id)
->where("Trad_lang", "EXTERNE")
->update(['Trad_text' => 123]);
这是这个问题:
https://github.com/laravel/framework/issues/5355
请参阅 Taylor 对此的回应。
关于php - Eloquent 更新所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36859119/