@kategg

Как получить новые записи из БД?

Допустим, я получаю n кол-во строк из таблицы chats, далее мне надо пройтись по полученной коллекции и произвести некоторые действия с каждой полученной записью. Но, во время работы цикла, в базе могут появиться новые записи, которые соответствуют условию выборки. И получается, что скрипт их не обработает, т.к. запрос к модели Chat уже сделан ранее. Есть ли какой-нибудь способ получить старые + новые записи?
Уточнение: запись после обработки удаляется, массив обрабатываемых данных небольшой, максимум - 10-20 записей
$chats = Chat::where("unread_messages", 0)->get();
$chats->each(function($chat) {
   // ...работа с записью 
  $chat->delete();
});

P.S. можно, конечно, цикл while написать и выгружать по одной, но не хотелось бы, т.к. это, потенциально, мина замедленного действия
while($chat = Chat::where("unread_messages", 0)->first()) {
    // ...работа с записью
    $chat->delete();
}
  • Вопрос задан
  • 136 просмотров
Пригласить эксперта
Ответы на вопрос 1
soulilya
@soulilya
Культурный, утонченный и изысканный.
Вам нужно создать event при вставке новой записи и при его срабатывании запрос будет выполняться. То есть, делаем событие на вставку новой записи. Слушаем событие в нужном компоненте и если оно срабатывает обновляем запрос.
Подробнее вот тут:
https://laravel.com/docs/11.x/events
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы