Laravel 5.0 массовое обновление

Я хотел бы выполнять несколько операторов обновления, а не выполнять их по отдельности, чтобы избежать нескольких обращений к БД. Следующий код

$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;  "

0

Решение

Если вы хотите использовать 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]);
}
1

Другие решения

Попробуй это:

$updateStatement = '';
foreach ($users as $user) {
$i++;
$updateStatement = "update users set packet_seqno = '".$i."' where id = ".$user->id;
\DB::update(\DB::raw($updateStatement));
}

Видите, если это поможет.

0

По вопросам рекламы [email protected]