如果有两个或多个数据,则更新;如果在单个查询中没有数据,则使用laravel-eloquont跳过



我有一个包含表数据的数组,我需要检查行,如果任何数据有两个或更多相同的数据,我需要更新它们并跳过其他数据。我通过使用两个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]);
}
} 

相关内容

  • 没有找到相关文章

最新更新