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

Laravel批量发送通知传递用户数据时属性不存在错误的解决咨询

问题解决:Laravel通知中访问用户属性报错的处理

错误原因

你当前的错误是因为把整个用户集合传递给了MyNotification的构造函数,而在toMail方法里直接访问集合的first_name属性——集合是多个用户实例的容器,本身并没有first_name这个属性,所以触发了属性不存在的错误。

正确处理方式

Laravel的Notification::send()方法本身会自动遍历你传入的$users集合,给每个用户单独发送通知,完全不需要你自己在通知类里遍历集合。具体处理如下:

1. 调整通知类,利用$notifiable参数获取单个用户

修改MyNotification类,不需要在构造函数里接收用户集合,而是在toMail方法中通过自带的$notifiable参数(这就是当前要发送的单个用户实例)访问用户属性:

class MyNotification extends Notification
{
    // 不需要接收用户集合的构造函数(除非你有其他全局数据要传递)

    public function toMail($notifiable)
    {
        return (new MailMessage)
            ->greeting('Hi ' . $notifiable->first_name)
            ->line('这里是通知内容')
            ->action('查看详情', url('/'));
    }

    // 可选:定义其他通知渠道(如数据库、短信等)
}

2. 调用通知时无需传递用户集合

发送通知的代码简化为:

Notification::send($users, new MyNotification());

特殊场景:需要用到全局集合数据

如果你确实需要在通知里使用整个用户集合的统计数据(比如总用户数),可以在构造函数里传递集合,但单个用户的属性依然要通过$notifiable获取:

class MyNotification extends Notification
{
    protected $totalUsers;

    public function __construct($users)
    {
        $this->totalUsers = $users->count();
    }

    public function toMail($notifiable)
    {
        return (new MailMessage)
            ->greeting('Hi ' . $notifiable->first_name)
            ->line("当前平台共有 {$this->totalUsers} 位用户")
            ->action('查看详情', url('/'));
    }
}

此时发送通知的代码保持你原来的写法即可:

Notification::send($users, new MyNotification($users));

内容的提问来源于stack exchange,提问作者Sajjad Ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 02:05:27