Отправка электронной почты пользователям с разными ролями в Laravel 7 с помощью Mailtrap
Я создаю веб-сайт электронной коммерции, на котором я хочу отправлять электронные письма пользователям с разными ролями после завершения заказа. Я смог сделать это только для определенной роли, но как мне сделать это для разных ролей? Поскольку обычные пользователи могут быть продавцами, продавцы также могут заказывать товары у других продавцов. Пока что это шаги, которые я пробовал:
OrderController.php
$users = User::whereHas('role', function ($q) {
$q->where('name', 'user', 'seller');
})->get();
Mail::to($users)->send(new OrderCompleted($suborder));
Однако это работает только и отправляет электронное письмо на
user
роли, а не
seller
роли.
Это моя модель почты:
OrderCompleted.php
public $suborder;
public function __construct(SubOrder $suborder)
{
$this->suborder = $suborder;
}
Я тоже пробовал
Mail::to($suborder->user->email)->send(new OrderCompleted($suborder));
где мой
SubOrder.php model
являются следующими:
public function user()
{
return $this->belongsTo(User::class);
}
Но когда я пытаюсь использовать этот второй запрос, я получаю сообщение об ошибке
Trying to get property 'email' of non-object
Как мне этого добиться? Любые советы будут высоко ценится. Спасибо!
2 ответа
Я мог отправлять электронные письма целевым пользователям, независимо от их ролей, используя
Mail::to($suborder->order->user->email)->send(new OrderCompleted($suborder));
Спасибо огромное!
По вашей этой строке "отправляет электронную почту ролям пользователей, а не продавцов". Я считаю, что вы хотите проверить имя как для "пользователя", так и для "продавца". Так что измените свой запрос,
$users = User::whereHas('role', function ($q) {
$q->whereIn('name', ['user', 'seller']);
})->get();
Ваш $q->where проверяет только второй аргумент, то есть пользователя в случае.
И что касается вашего второго вопроса, я считаю, что @sta правильная.