前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Laravel 消息通知

Laravel 消息通知

作者头像
崔哥
发布2023-03-24 15:14:16
1.1K0
发布2023-03-24 15:14:16
举报
文章被收录于专栏:崔哥的专栏崔哥的专栏

创建通知

代码语言:javascript
复制
php artisan make:notification InvoicePaid

这个命令会在 app/Notifications 目录下生成一个新的通知类。每个通知类都包含一个 via 方法以及一个或多个消息构建的方法比如 toMail 或 toDatabase,它们会针对特定的渠道把通知转换为对应的消息。

发送通知

使用 Notifiable Trait

该方法默认包含在应用程序的 App\Models\User 模型中:

代码语言:javascript
复制
<?php

namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable
{
    use Notifiable;
}

use App\Notifications\InvoicePaid;

$user->notify(new InvoicePaid($invoice));

你可以在任何模型中使用 Notifiable trait。而不仅仅是在 User 模型中。

使用 Notification Facade

主要用在当你需要给多个可接收通知的实体发送的时候,比如给用户集合发送通知。

代码语言:javascript
复制
$users = User::query()->get();
Notification::send($users, new InvoicePaid());

您也可以使用 sendNow 方法立即发送通知。即使通知实现了 ShouldQueue 接口,该方法也会立即发送通知:

代码语言:javascript
复制
Notification::sendNow($developers, new DeploymentCompleted($deployment));

发送指定频道

每个通知类都有一个 via 方法,用于确定将在哪些通道上传递通知。通知可以在 mail、database、broadcast、vonage 和 slack 频道上发送。

代码语言:javascript
复制
/**
 * 获取通知发送频道
 * @param  mixed  $notifiable
 * @return array
 */
public function via($notifiable)
{
    return $notifiable->prefers_sms ? ['vonage'] : ['mail', 'database'];
}

数据库通知

开始之前,您需要创建一个数据库表来保存您的通知

代码语言:javascript
复制
php artisan notifications:table

php artisan migrate

格式化数据库通知

如果通知支持存储在数据库表中,则应在通知类上定义 toDatabasetoArray 方法。这个方法将接收一个 $notifiable 实体并且应该返回一个普通的 PHP 数组。 返回的数组将被编码为 JSON 并存储在 notifications 表的 data 列中。让我们看一个示例 toArray 方法:

代码语言:javascript
复制
public function toArray($notifiable)
{
    return [
        'invoice_id' => $this->invoice->id,
        'amount' => $this->invoice->amount,
    ];
}

toDatabase 对比 toArray

broadcast 通道也使用 toArray 方法来确定将哪些数据广播到 JavaScript 驱动的前端。如果您想为 databasebroadcast 通道提供两种不同的数组表示,您应该定义一个 toDatabase 方法而不是 toArray 方法。

访问通知

默认情况下,通知将按 created_at 时间戳排序,最近的通知位于集合的开头:

代码语言:javascript
复制
$user = App\Models\User::find(1);

foreach ($user->notifications as $notification) {
    echo $notification->type;
}

如果您只想检索「未读」通知,可以使用 unreadNotifications

代码语言:javascript
复制
$user = App\Models\User::find(1);

foreach ($user->unreadNotifications as $notification) {
    echo $notification->type;
}

将通知标记为已读

代码语言:javascript
复制
//直接在通知集合上使用 markAsRead 方法,而不是循环遍历每个通知:
$user->unreadNotifications->markAsRead();

//您还可以使用批量更新查询将所有通知标记为已读,而无需从数据库中检索它们:
$user = App\Models\User::find(1);
$user->unreadNotifications()->update(['read_at' => now()]);

//删除所有通知
$user->notifications()->delete();
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建通知
  • 发送通知
    • 使用 Notifiable Trait
      • 使用 Notification Facade
        • 发送指定频道
        • 数据库通知
          • 格式化数据库通知
            • 访问通知
              • 将通知标记为已读
              相关产品与服务
              数据库
              云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档