Laravel 中的大量更新(Eloquent)

Yar*_*ron 5 laravel eloquent

有没有办法在 Laravel(MySQL 数据库)中批量插入(插入或更新,如果存在)记录?

假设我有一张桌子:

[id:1 value:4]
[id:2 value:5]
Run Code Online (Sandbox Code Playgroud)

我想执行:

Model::massupsert([
  [id:1 value:100],
  [id:3 value:20]
]);
Run Code Online (Sandbox Code Playgroud)

之后的表格是:

[id:1 value:100]
[id:2 value:5]
[id:3 value:20]
Run Code Online (Sandbox Code Playgroud)

bai*_*yao 12

现在(2020 年 10 月 6 日),Laravel(v8.10.0) 有了原生upsert支持。https://github.com/laravel/framework/pull/34698

Model::upsert([
    ['id' => 1, 'value' => 100],
    ['id' => 3, 'value' => 20],
], 'id');
Run Code Online (Sandbox Code Playgroud)


Jon*_*eir 6

Laravel 没有原生的 UPSERT 支持。

我为此创建了一个包:https : //github.com/staudenmeir/laravel-upsert

Model::upsert([
    ['id' => 1, 'value' => 100],
    ['id' => 3, 'value' => 20],
], 'id', ['value']);
Run Code Online (Sandbox Code Playgroud)