Как уведомить всех администраторов, выбрав status_id записей из указанной таблицы, когда пользователь обновил запись по электронной почте

#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 здесь