Значит проблема такая , нужно было сделать рассылку по 6к пользователям, я взял таблицу с ними сделал запрос через AR $users=Users::find()->all()
Ну и в цикле начал отправлять после каждой отправки пользователь должен был удалится
Но хрен я угодал $user->delete() внутри цикла не срабатывало и получается крон запускал рассылку заново но пользователи не удалялись. Может кто объяснить почему ?
Проблема с Active Record
Re: Проблема с Active Record
Второй запустился когда первый ещё не всех доудалил.
-
- Сообщения: 251
- Зарегистрирован: 2014.08.18, 14:01
Re: Проблема с Active Record
Смотри документацию AR и методы bach or each. И используй сервер очередей. В цикле с batch сделай выборку по 10 записей и создание задачи на отправку письма в сервер очередей
-
- Сообщения: 50
- Зарегистрирован: 2017.03.06, 15:37
- Откуда: Владивосток
Re: Проблема с Active Record
Неправильно выбирать 6K записей за один раз.
Во-первых, если несколько потоков, возможны одновременные обработки.
Во-вторых, памяти может не хватить.
Я уверен, что внутри цикла всё срабатывало и удалялось, проблема в чём-то другом.
Если только не:
1) Переопределён метод delete()
2) Не возникал Exception, который игнорировался.
Сделай цикл do { ... } while (0 !== count($users));
И в этом цикле выбирай, например, по 10 пользователей через find()->limit(100)->all();
Во-первых, если несколько потоков, возможны одновременные обработки.
Во-вторых, памяти может не хватить.
Я уверен, что внутри цикла всё срабатывало и удалялось, проблема в чём-то другом.
Если только не:
1) Переопределён метод delete()
2) Не возникал Exception, который игнорировался.
Сделай цикл do { ... } while (0 !== count($users));
И в этом цикле выбирай, например, по 10 пользователей через find()->limit(100)->all();