【问题标题】:Eloquent updates all rowsEloquent 更新所有行
【发布时间】:2016-04-26 16:36:05
【问题描述】:

基本上,我尝试对包含两个主键的表中的一行进行更新。主键是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       |
+---------+-----------+-----------+-----------+

【问题讨论】:

  • first() 方法只会返回一项,所以您确定它在每个更新语句中更新了数据库中的多行吗?在更新之前尝试dd() 查询结果,这样您就可以看到正在更新的内容。另外,您的表是否需要复合主键?也许这就是导致问题的原因?

标签: php mysql laravel eloquent


【解决方案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

请参阅 Taylor 对此的回应。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-19
    • 2020-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多