Октябрь CMS - отправка почты членам бэкэнд-группы - PullRequest
0 голосов
/ 28 июня 2019

Я создал группу для определенного набора пользователей с правами администратора, которые должны получать уведомления при публикации нового контента.Давайте назовем эту группу «notify-admins» ради аргумента.

У меня есть этот код, взятый из октябрьских документов для ( Users and Permissions )

Mail::sendTo(UserGroup::where('code', 'notify-admins')->get()->users, 'mailTemplate', $data);

Однако, это выдает Property [users] does not exist on this collection instance так ясно, что я делаю что-то не так!

Все, что мне нужно сделать, - это разослать электронное письмо всем членам группы - как лучше?

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

Итак, я делал это неправильно.Вместо того, чтобы запрашивать группы пользователей, мне нужно было посмотреть на пользователей, которые были членами групп.Это код, который я в конечном итоге использовал, чтобы выбрать пользователей в целевой группе, а затем перебирать их, выдавая электронные письма.

$admins = User::whereHas('groups', function($query) {
   $query->where('code', 'notify-admins');
})->get();

Затем на электронную почту ...

foreach ($admins as $admin) {
    Mail::sendTo($admin->email, mailTemplate, $data);
}
0 голосов
/ 28 июня 2019

Мне любопытно узнать, где вы пишете этот код? Я предполагаю, что файл регистрации плагина?

Вот два ответа для вас. Метод where() фактически возвращает коллекцию групп, где «code» - это «notify-admin». В лучшем примере, где цена предмета составляет 200 долларов; Вы можете иметь несколько предметов по 200 долларов. Если вы хотите получить доступ к свойству users в коллекции, вам придется либо создать цикл foreach (или цикл for), либо вызвать метод first().

В вашем случае, я думаю, вы могли бы просто вызвать метод first(), например, $backend = UserGroup::where('code', 'notify-admin')->first()->users; и попытаться выполнить отправку почты. Я не проверял выполнение почтовой части, потому что это совсем другая проблема.

Вот несколько советов по диагностике вашей проблемы и как я получил свой ответ. Совет № 1 Не ограничивайте себя формулой. Я создал страницу CMS, и там я поместил раздел кода, выдающий мне ошибки:

function onStart() {
    $this['backend'] = UserGroup::where('code', 'moderator')->get()->users;
}

Это дало мне ошибку, потому что не удалось найти класс UserGroup. Я должен был добавить:

использовать \ Backend \ Models \ UserGroup;

Затем он дал мне ошибку, которую вы получили. Совет № 2 Понимание объектов, с которыми вы работаете. Поэтому я удалил ->users, чтобы посмотреть, что я получаю только с ->get(). Оказывается, это коллекция моделей, где 'code' = 'notify-admin'. Ну, это приводит меня к добавлению first():

$backend = UserGroup::where('code', 'notify-admin')->get()->first()->users;

или это тоже работает

$backend = UserGroup::where('code', 'notify-admin')->first()->users;

...