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表:
- 先生成模型:
php artisan make:model Notification
- 在模型里配置表名和字段类型转换:
namespace App; use Illuminate\Database\Eloquent\Model; class Notification extends Model { protected $table = 'notifications'; // 自动把data字段转为数组 protected $casts = ['data' => 'array']; }
- 添加关联方法(以关联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
相关产品推荐
相关产品推荐

