我有一个包含表数据的数组,我需要检查行,如果任何数据有两个或更多相同的数据,我需要更新它们并跳过其他数据。我通过使用两个foreach来完成这项操作,它使我的查询速度非常慢。
foreach ($vehicles as $key => $value) {
$exists = DB::table('vehicles')
->where('site', $value->site)
->whereNull('deleted_at')
->get('id');
if ($exists->count() > 1) {
$duplicate = 1;
foreach ($exists as $exist) {
DB::table('vehicles')
->where('id', $exist->id)
->update([
'duplicate_entry' => $duplicate,
]);
}
}
我有一个解决方案,我可以为第二个循环添加upsert
方法,我需要知道有没有任何方法可以在单个查询中做到这一点?
您可以使用Eloquent模型
工作流程:-
您可以简单地在数组中获取条件记录的ide(现在您有了一个ide数组(,然后使用whereIn((更新属于该ide的多个记录。
foreach ($vehicles as $key => $value){
$exists = Vehicle::where('site', $value->site)
->whereNull('deleted_at')
->pluck('id')->toArray();
if (count($exists) > 1) {
$duplicate = 1;
Vehicle::whereIn('id', $exists)
->update(['duplicate_entry' => $duplicate]);
}
}