Laravel Eloquent - 使用 whereIn 数组批量更新

Laravel Eloquent - bulk update with whereIn array

我正在做一个项目,我需要为每个硬币 ID 一次更新许多行。

为了更新所有硬币值,我从 API 中获取它们,所以例如我有:

    $coinsList= [[id="bitcoin", symbol="btc", name="Bintcoin"],[id="etherium", symbol="eth", name="Etherium"]];

数据库 table 列如下:

**| id | coin_id | symbol | name |**

现在,我想 更新 所有值到数据库,仅根据 id,所以这就是我所做的:

    // first get ids from my table
    $exist_ids = Coinlist::all('coin_id')->pluck('coin_id')->toArray();
    
    //get all ids to update (to ignore other ids):
    $updatable_ids = array_values(array_intersect($exist_ids, $allCoinIds));//result for example is: array("bitcoin","etherium");
    
//and now, update the database:
    Coinlist::whereIn('coin_id', $updatable_ids)
                ->update([
                    'symbol' => $coinsList[$key]['symbol'],
                    'name' => $coinsList[$key]['name'],
                    'updated_at' => now()
                ]);

问题是,我没有“$key”来更新正确的行,我在这里缺少什么?

谢谢!

这里有一个很好的解决方法: 一开始,我使用了这个库:https://github.com/mavinoo/laravelBatch 更新许多动态行,但它真的很慢,然后感谢 Yasin,我搬到了:https://github.com/iksaku/laravel-mass-update 现在它工作得更好。

实现很简单,在Model中添加一段简单的代码class,然后添加:

User::massUpdate(
    values: [
        ['username' => 'iksaku', 'name' => 'Jorge González'],
        ['username' => 'gm_mtz', 'name' => 'Gladys Martínez'],
    ],
    uniqueBy: 'username'
);

而 uniqueBy 是该行的键,并添加其他列值以动态更改它们。