Отправка электронной почты пользователям с разными ролями в 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 правильная.

Другие вопросы по тегам