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

Я использую Laravel 7, и у меня есть таблица topics, в которой у меня есть 5 статусов, эти статусы являются внешним ключом из таблицы статусов.

Таблица тем

id topic owner_id status_id
1 A 1 2
2 B 2 6
3 C 3 2
4 D 4 6

Таблица статусов

id name
1 Draft
2 Waiting for topic approval
3 Edit the topic
4 Do not approve the topic
5 Approved topic
6 Waiting for scoring
7 Approved score

Я хочу уведомлять всех администраторов (user_role=1 в таблице пользователей), когда пользователи обновляют запись, где status_id = 2 или 6, по электронной почте.

введите здесь описание изображения

Заранее спасибо. Я с нетерпением жду вашего ответа.


person Jill    schedule 25.05.2021    source источник
comment
как вы будете уведомлять админов?? по электронной почте??   -  person zahid hasan emon    schedule 25.05.2021
comment
Получите всех администраторов из базы данных, а затем отправьте каждому уведомление.   -  person apokryfos    schedule 25.05.2021
comment
@zahidhasanemon по электронной почте, сэр.   -  person Jill    schedule 25.05.2021
comment
@apokryfos Я пытался, но я не совсем понимаю, и у меня не получается, поэтому я разместил эту тему, сэр.   -  person Jill    schedule 25.05.2021
comment
Вам нужно попытаться решить эту проблему самостоятельно. Если вы не можете справиться с этим, поделитесь кодом с вашей попыткой, и тогда мы сможем вам помочь. Я предлагаю (а) создать уведомление по электронной почте (б) получить все администраторов из базы данных, (c) зациклиться на каждом администраторе и отправить новый экземпляр уведомление. Шаблон laravel уже гарантирует, что пользователи могут быть уведомлены. Если у вас возникли проблемы после того, как вы написали код, пытающийся это сделать, обновите свой вопрос кодом, который не работает.   -  person apokryfos    schedule 25.05.2021


Ответы (1)


допустим, пользователь редактирует тему с идентификатором 1.

// import classes in your controller
use Illuminate\Support\Facades\Notification;
use App\Notifications\TopicUpdateNotification;
 
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 App\Notifications;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;

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 \Illuminate\Notifications\Messages\MailMessage
     */
    public function toMail($notifiable)
    {
        return (new MailMessage)
        ->view(
            'topic_update_email', ['topic' => $this->topic, 'user' => $this->user]
        )
        ->from('[email protected]', '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 [
            //
        ];
    }
}

и, наконец, создайте файл блейда в папке представлений 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 здесь

person zahid hasan emon    schedule 25.05.2021