Мне нужно отправлять электронную почту нескольким пользователям каждый день. Мой код такой. Это тоже работает, но я неправильно понял.
foreach($advisors as $advisor) {
$receivers = [];
foreach($advisor->clients as $client) {
array_push($receivers, $client);
}
array_push($receivers, $advisor);
if (count($receivers) > 0) {
Notification::send($receivers, new DailyEmail($advisor));
}
}
прежде чем я кодирую, как показано ниже.
foreach($advisors as $advisor) {
$receivers = [];
foreach($advisor->clients as $client) {
array_push($receivers, $client);
}
if (count($receivers) > 0) {
Notification::send($receivers, new DailyEmail($advisor));
}
Notification::send($advisor, new DailyEmail($advisor));
}
но если я так кодирую, только один пользователь получил электронную почту.
Я не могу понять, почему это работает иначе. Объясните, пожалуйста.






«Старый» код запускал событие Notification :: send дважды, один раз для получателей и один раз для советника.
Ваш «новый» код запускает его только один раз для получателей, поэтому советник не получает уведомление по электронной почте.
Возможно, я неправильно понимаю ваш код из-за отсутствия дополнительной информации, но если вы хотите отправить уведомление клиентам $ advor->, вам не нужно их зацикливать и создавать новый массив, на самом деле Notification :: send ожидает коллекция
Просто делать:
foreach($advisors as $advisor) {
if (count($advisor->clients) > 0) {
Notification::send($advisor->clients, new DailyEmail($advisor));
}
}
Что делает
DailyEmail? Как вы работаете с объектом $ Advisor? Похоже, у советника много клиентов. Чего я не понимаю, так это того, почему вы нажимаете и то, и другое в плоском массиве. Просто проверьте, есть ли у$advisorклиенты, и обработайте их оттуда. Нет необходимости вarray_push()