You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中如何通过通知ID获取关联关系?Laravel5.6数据库通知问题

在Laravel 5.6中查看数据库通知及获取关联关系

嘿,我来帮你搞定Laravel 5.6里的数据库通知查看和关联获取问题~先看你的LeavesNotification类,已经正确设置了database投递通道,接下来咱们一步步来:

一、如何查看数据库通知

Laravel默认把数据库通知存在notifications表里,有两种常用的查看方式:

1. 借助Notifiable模型的内置方法

如果你的用户模型(比如User)使用了Notifiable trait,直接通过模型就能轻松获取通知:

// 获取指定用户的所有通知
$user = \App\User::find(1);
$allNotifications = $user->notifications;

// 只获取未读通知
$unreadNotifications = $user->unreadNotifications;

2. 直接查询notifications表

如果需要全局筛选或者按通知类型过滤(比如只查你的请假通知),可以直接操作数据库表:

use App\Notifications\LeavesNotification;

// 筛选所有LeavesNotification类型的通知
$leaveNotifications = \DB::table('notifications')
    ->where('type', LeavesNotification::class)
    ->get();

二、通过通知ID获取关联关系

数据库通知的data字段是JSON格式,里面存储了你在通知构造函数里传入的数据。要获取关联关系,有两种实用方案:

方案1:解析JSON字段查询关联

假设你的$data里包含了请假记录的ID(比如leave_id),可以这样操作:

// 根据通知ID获取通知记录
$notification = \DB::table('notifications')->find($yourNotificationId);

// 解析JSON格式的data字段为数组
$notificationData = json_decode($notification->data, true);

// 如果data里有leave_id,就查询对应的Leave模型
if (isset($notificationData['leave_id'])) {
    $relatedLeave = \App\Leave::find($notificationData['leave_id']);
}

方案2:自定义通知模型封装关联

如果需要更优雅的关联处理,可以创建自定义通知模型来封装notifications表:

  1. 先生成模型:
php artisan make:model Notification
  1. 在模型里配置表名和字段类型转换:
namespace App;

use Illuminate\Database\Eloquent\Model;

class Notification extends Model
{
    protected $table = 'notifications';
    // 自动把data字段转为数组
    protected $casts = ['data' => 'array'];
}
  1. 添加关联方法(以关联Leave模型为例):
public function leave()
{
    // 注意:Laravel 5.6对JSON字段的关联支持有限,MySQL 5.7+才可直接用这种方式
    return $this->belongsTo(\App\Leave::class, 'data->leave_id');
}

之后就可以这样获取关联:

$notification = \App\Notification::find($yourNotificationId);
$relatedLeave = $notification->leave;

如果你的环境不支持JSON字段关联,方案1会更稳妥。

小建议:优化你的LeavesNotification类

可以新增toDatabase方法,明确指定存储的data结构,让后续解析更清晰:

public function toDatabase($notifiable)
{
    return [
        'leave_id' => $this->data['leave_id'],
        'message' => "你的请假申请已提交",
        'applicant' => $notifiable->name
    ];
}

内容的提问来源于stack exchange,提问作者Rio Aditya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:25:49