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 是该行的键,并添加其他列值以动态更改它们。
我正在做一个项目,我需要为每个硬币 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 是该行的键,并添加其他列值以动态更改它们。