当用户通过电子邮件更新记录时,如何通过从指定表中选择记录的 status_id 来通知所有管理员

Posted

技术标签:

【中文标题】当用户通过电子邮件更新记录时,如何通过从指定表中选择记录的 status_id 来通知所有管理员【英文标题】:How to notify all admins by selecting the status_id of the records from the specified table when the user updated the record via e-mail 【发布时间】:2021-08-13 07:40:10 【问题描述】:

我使用 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 的记录时。

提前谢谢你。期待您的回复。

【问题讨论】:

您将如何通知管理员?通过电子邮件?? 从数据库中获取所有管理员,然后send each one a notification。 @zahidhasanemon 通过电子邮件先生。 @apokryfos 我试过了,但我不是很清楚,我没有做到这一点,这就是我发布这个主题的原因,先生。 您需要自己尝试解决这个问题。如果您无法管理它,请与您的尝试共享代码,然后我们可以帮助您。我建议 (a) create a mail notification (b) 从数据库中获取所有管理员,(c) 遍历每个管理员和 send a new instance of the notification。 laravel 样板文件已经确保用户得到通知。如果您在编写尝试执行此操作的代码后遇到问题,请使用失败的代码更新您的问题 【参考方案1】:

假设用户正在编辑 id 为 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('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 通知文档here

【讨论】:

以上是关于当用户通过电子邮件更新记录时,如何通过从指定表中选择记录的 status_id 来通知所有管理员的主要内容,如果未能解决你的问题,请参考以下文章

通过从另一个表中查找某个范围内的值来游标并更新数据库记录

通过从非反应组件调度操作来更新 React 组件

通过从我的数据库表中发送用户名和密码来登录 Facebook

通过从 sql server 加入表来更新访问表

PLSQL程序通过从表中获取记录来添加数字[关闭]

如何通过从另一个下拉列表中选择值来填充下拉列表?