Проблема с Active Record

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
demonlaz
Сообщения: 10
Зарегистрирован: 2017.06.27, 13:31

Проблема с Active Record

Сообщение demonlaz »

Значит проблема такая , нужно было сделать рассылку по 6к пользователям, я взял таблицу с ними сделал запрос через AR $users=Users::find()->all()
Ну и в цикле начал отправлять после каждой отправки пользователь должен был удалится
Но хрен я угодал $user->delete() внутри цикла не срабатывало и получается крон запускал рассылку заново но пользователи не удалялись. Может кто объяснить почему ?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Проблема с Active Record

Сообщение ElisDN »

Второй запустился когда первый ещё не всех доудалил.
german.igortcev
Сообщения: 251
Зарегистрирован: 2014.08.18, 14:01

Re: Проблема с Active Record

Сообщение german.igortcev »

Смотри документацию AR и методы bach or each. И используй сервер очередей. В цикле с batch сделай выборку по 10 записей и создание задачи на отправку письма в сервер очередей
frid-karatel
Сообщения: 50
Зарегистрирован: 2017.03.06, 15:37
Откуда: Владивосток

Re: Проблема с Active Record

Сообщение frid-karatel »

Неправильно выбирать 6K записей за один раз.
Во-первых, если несколько потоков, возможны одновременные обработки.
Во-вторых, памяти может не хватить.

Я уверен, что внутри цикла всё срабатывало и удалялось, проблема в чём-то другом.
Если только не:
1) Переопределён метод delete()
2) Не возникал Exception, который игнорировался.

Сделай цикл do { ... } while (0 !== count($users));
И в этом цикле выбирай, например, по 10 пользователей через find()->limit(100)->all();
Ответить