Я переписываю части устаревшего программного обеспечения, используя laravel / eloquent.
мое понимание типичного eloquent хорошо, и я сделал несколько проектов на laravel, но не так много для устаревшего кода.
Я пытаюсь сделать это в eloquent, который создает 79 строк:
INSERT IGNORE INTO `ps_module_shop` (`id_module`, `enable_device`, id_shop) (SELECT `id_module`, `enable_device`, 555 FROM ps_module_shop WHERE `id_shop` = 1);
Я читал, что вы можете выполнять массовую вставку только с model::insert
, но я не уверен, как это сделать сэтот запрос, в частности, кроме чистого sql.
Вот как я сейчас это делаю, но raw sql выглядит более элегантно для этого запроса:
$blkInsert = [];
$tplModuleShop = ModuleShop::where('id_shop', 1)->get();
foreach($tplModuleShop as $mshop) {
$blkInsert[] = [
'id_module' => $mshop->id_module,
'enable_device' => $mshop->enable_device,
'id_shop' => $shop->id_shop,
];
}
ModuleShop::insert($blkInsert);
Примечание: я знаю этоэто сводная таблица, но это устаревшая база данных, которая использует составные ключи, поэтому я решил рассматривать ее как свою собственную модель.