当用户通过电子邮件更新记录时,如何通过从指定表中选择记录的 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 来通知所有管理员的主要内容,如果未能解决你的问题,请参考以下文章