Я хотел бы выполнять несколько операторов обновления, а не выполнять их по отдельности, чтобы избежать нескольких обращений к БД. Следующий код
$updateStatement = '';
foreach ($users as $user) {
$i++;
$updateStatement = $updateStatement. "update users set packet_seqno = '".$i."' where id = ".$user->id . '; ';
}
\DB::statement($updateStatement);
Однако не работает и выкидывает ошибку
SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 В синтаксисе SQL имеется ошибка; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с ‘update
Можете ли вы помочь мне исправить это?
Вот дамп $ updateStatement.
"update ppt_import_mortgage1 set packet_seqno = '1' where id = 37; update ppt_import_mortgage1 set packet_seqno = '2' where id = 39; update ppt_import_mortgage1 set packet_seqno = '3' where id = 40; update ppt_import_mortgage1 set packet_seqno = '4' where id = 42; update ppt_import_mortgage1 set packet_seqno = '5' where id = 43; update ppt_import_mortgage1 set packet_seqno = '6' where id = 44; update ppt_import_mortgage1 set packet_seqno = '7' where id = 45; update ppt_import_mortgage1 set packet_seqno = '8' where id = 46; update ppt_import_mortgage1 set packet_seqno = '9' where id = 47; update ppt_import_mortgage1 set packet_seqno = '10' where id = 48; "
Если вы хотите использовать eloquent, вы можете просто сделать это:
foreach ($users as $user) {
$i++;
User::where('id',$user->id)->update(['packet_seqno' => $i]);
}
или лучше:
foreach ($users as $user) {
$i++;
$user->update(['packet_seqno' => $i]);
}
Попробуй это:
$updateStatement = '';
foreach ($users as $user) {
$i++;
$updateStatement = "update users set packet_seqno = '".$i."' where id = ".$user->id;
\DB::update(\DB::raw($updateStatement));
}
Видите, если это поможет.