#laravel #eloquent #laravel-7 #laravel-query-builder #laravel-notification
Вопрос:
Я использую Laravel 7, и у меня есть таблица тем, в которой у меня 5 статусов, эти статусы являются внешним ключом из таблицы статусов.
Таблица Тем
ID | тема | идентификатор владельца | status_id |
---|---|---|---|
1 | A | 1 | 2 |
2 | B | 2 | 6 |
3 | C | 3 | 2 |
4 | D | 4 | 6 |
Таблица статусов
ID | Имя |
---|---|
1 | Проект |
2 | Ждем утверждения темы |
3 | Отредактируйте тему |
4 | Не одобряйте тему |
5 | Утвержденная тема |
6 | В ожидании подсчета очков |
7 | Утвержденный балл |
Я хочу уведомлять всех администраторов (роль пользователя=1 в таблице пользователей), когда пользователи обновляют запись, в которой status_id = 2 или 6, по электронной почте.
Заранее спасибо. Я с нетерпением жду вашего ответа.
Комментарии:
1. как вы будете уведомлять администраторов?? по электронной почте??
2. Получите всех администраторов из базы данных, а затем отправьте каждому уведомление .
3. @zahidhasanemon по электронной почте, сэр.
4. @apokryfos Я пытался, но я не совсем понимаю, и у меня это не получается, вот почему я опубликовал эту тему, сэр.
5. Вам нужно попытаться решить эту проблему самостоятельно. Если вы не можете справиться с этим, поделитесь кодом со своей попыткой, и тогда мы сможем вам помочь. Я предлагаю (а) создать уведомление по почте (б) получить всех администраторов из базы данных, (в) просмотреть каждого администратора и отправить новый экземпляр уведомления . Шаблон laravel уже гарантирует, что пользователи могут быть уведомлены. Если у вас возникли проблемы после того, как вы написали код, пытающийся это сделать, обновите свой вопрос кодом, который не удался
Ответ №1:
допустим, пользователь редактирует тему с идентификатором 1.
// import classes in your controller
use IlluminateSupportFacadesNotification;
use AppNotificationsTopicUpdateNotification;
public function update(Request $request, $id)
{
// some validation if needed
$topic = Topic::find($id);
$status = $topic->status_id;
$topic->update([
'topic' => $request->topic,
// add any other column you want to update
]);
// now we are checking if the topic status was 2 or 6
if ($status == 2 || $status == 6) {
// finding all the admins
$admins = User::where('user_role', 1)->get();
$user = auth()->user();
// sending notification via Notification Facade
Notification::send($admins, new TopicUpdateNotification($topic, $user));
}
}
мы использовали класс с именем TopicUpdateNotification
. это класс уведомлений, и мы должны создать его с помощью команды artisan.
php artisan make:notification TopicUpdateNotification
вы найдете его в app/Notifications
каталоге вашего проекта. содержимое для этого класса
<?php
namespace AppNotifications;
use IlluminateBusQueueable;
use IlluminateContractsQueueShouldQueue;
use IlluminateNotificationsMessagesMailMessage;
use IlluminateNotificationsNotification;
class TopicUpdateNotification extends Notification
{
use Queueable;
/**
* Create a new notification instance.
*
* @return void
*/
public function __construct($topic, $user)
{
$this->topic = $topic;
$this->user = $user;
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['mail'];
}
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return IlluminateNotificationsMessagesMailMessage
*/
public function toMail($notifiable)
{
return (new MailMessage)
->view(
'topic_update_email', ['topic' => $this->topic, 'user' => $this->user]
)
->from('support@yourcompany.com', 'Your Company Name') // you can omit this line if you have valid MAIL_FROM_ADDRESS and MAIL_FROM_NAME in your .env
->subject('Topic Updated');
}
/**
* Get the array representation of the notification.
*
* @param mixed $notifiable
* @return array
*/
public function toArray($notifiable)
{
return [
//
];
}
}
и, наконец, создайте файл блейда в папке views topic_update_email.blade.php
<!DOCTYPE html>
<html>
<head>
<title></title>
</head
<body>
<h1>User {{ $user->name }} updated the topic {{ $topic->id }}</h1>
</body>
</html>
вы можете найти полный документ с уведомлением laravel здесь