Добрый день, всем. Подскажите возможно ли сохранить 300 записей за два запроса к базе.
К примеру есть две таблицы: статьи и картинки к ним.
article
-----------------------
id
title
description
article_image
-----------------------
id
article_id
name
Мне приходит массив статьи и ссылки на картинки.
$articles = [
'article_1' => [
'title' => 'Title 1',
'description' => 'text 1',
'images' =>['name1.jpg','name2.jpg']
],
'article_2' => [
'title' => 'Title 2',
'description' => 'text 2',
'images' =>['name3.jpg','name4.jpg']
], // ...
];
Множественное сохранения картинок в одном запросе я уже усвоил,
я пробегаю по массиву статей и генерирую массив картинок и затем сохраняю.
\Yii::$app->db
->createCommand()
->batchInsert('article_image', ['article_id', 'name'], [
[1, 'name1.jpg'],
[2, 'name2.jpg'],
[3, 'name3.jpg'],
])
->execute();
Т.е. сейчас
у меня 101 запрос к базе:
100 запросов на сохранение статей
и 1 запрос на сохранения картинок.
Как можно сохранить за 2 запроса ? проблема в том что при сохранения картинок нужен article_id который возможно получить только при сохранении статьи.
Или подскажите как вы решаете вопрос оптимизации запросов к базе при множественном сохранении?
Придумал один способ как сохрнатить 100 статей 200 картинок за 3 запроса
1. первый запрос сохраняет 100 статей с уникальным номер (добавлена новая колонка unique_number, и я генерирую сам и сохраняю в массив )
2 . второй запрос делаю выботку по 100 unique_number которые только сгенерировал получаю Ids статей, преобразую
unique_number -> id
3. сохраняю 200 картинок одним запросом