Laravel数据库通知报错:Column 'notifiable_id' cannot be null
问题解决:Laravel数据库通知
notifiable_id为空报错 问题原因
报错提示notifiable_id字段不能为空,核心原因是Laravel通知系统需要从目标User模型实例中读取主键值,作为notifiable_id存入数据库,但当前User模型的主键配置与实际表结构不匹配,导致无法正确获取主键值。
解决方案
1. 修正User模型的主键配置
如果你的users表主键是大写的ID(而非Laravel默认的小写id),必须在User模型中显式声明主键字段:
class User extends Model { // 指定表主键字段名 protected $primaryKey = 'ID'; // 若主键不是自增整数类型(比如字符串/UUID),需额外添加: // public $incrementing = false; }
2. 确保查询返回完整的模型属性(可选优化)
控制器中使用select()仅选取了ID和USERNAME,虽然理论上满足主键读取需求,但如果后续有依赖模型其他属性的操作,建议改为获取user表的全部字段:
$admins = User::join('userroleas UR', 'UR.user_id', 'user.ID') ->whereIn('UR.role_id', [31, 114]) ->select('user.*') // 获取user表全部字段 ->get();
验证
修改后重新执行通知发送逻辑,Laravel将能正确读取User模型的ID值,作为notifiable_id插入到notifications表中,解决约束报错问题。
内容的提问来源于stack exchange,提问作者Hafid Maulana
相关产品推荐
相关产品推荐

