Как лучше реализовать запись в БД? Всем привет!
Есть у меня таблица с пользователями (users) и другая таблица table.
Мне нужно, допустим, за последние 6 месяцев за каждый день записать в таблицу table по несколько записей, связанных с таблицей users.
Как посоветуете это сделать без цикла? Потому что если пользователей будет за 1000, то цикл великоват получится.
Использую Laravel.

21 Авг 2019 в 06:33
167 +1
0
Ответы
1

Вам нужно использовать массовую вставку данных (bulk insert) в базу данных. В Laravel для этого есть метод insert() модели Eloquent. Вот пример, как это можно реализовать:

$userIds = User::pluck('id'); // Получаем массив идентификаторов пользователей
$data = [];
foreach($userIds as $userId) {
// Генерируем данные для вставки в таблицу table для каждого пользователя
for ($i = 0; $i < 180; $i++) { // 6 месяцев * 30 дней
$data[] = [
'user_id' => $userId,
'some_data' => 'some_value',
'created_at' => now()->subDays($i)
];
}
}
Table::insert($data); // Массовая вставка данных

В этом примере мы сначала получаем массив идентификаторов пользователей, затем генерируем данные для вставки в таблицу table для каждого пользователя за последние 6 месяцев. После этого мы используем метод insert() модели Table для массовой вставки сгенерированных данных.

Важно также проверить, что столбец created_at в таблице table правильно настроен для автоматического заполнения текущей датой и временем. А также удостовериться, что у вас есть индекс на столбец user_id для ускорения операций вставки.

20 Апр в 13:16
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 471 автору
Первые отклики появятся уже в течение 10 минут
Прямой эфир