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

Laravel广播通知报错:更新版本与包后触发Pusher广播类型错误

Laravel升级后通知模块触发Grammar::parameterize()类型错误的解决思路

嘿,我懂你升级框架后没碰代码却出问题的郁闷!先把你遇到的错误贴出来,方便大家对照:

{ 
  "message": "Type error: Argument 1 passed to Illuminate\\Database\\Grammar::parameterize() must be of the type array, integer given, called in /home/forge/devapi.creatorshub.online/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/Grammar.php on line 681", 
  "exception": "Symfony\\Component\\Debug\\Exception\\FatalThrowableError", 
  "file": "/home/forge/devapi.cre..." 
}

这个错误其实是Laravel新版本对数据库通知的查询参数格式做了严格要求——旧版本可能允许传单个整数,现在必须传数组。咱一步步排查解决:

  • 先检查自定义的通知模型(如果有的话)
    如果你重写了Notification模型的查询作用域,比如whereNotifiable这类方法,看看是不是直接把单个ID传进去了。比如之前可能写的是:

    public function scopeWhereNotifiable($query, $notifiableId)
    {
        return $query->where('notifiable_id', $notifiableId);
    }
    

    现在得改成支持数组的形式,或者强制把参数转成数组:

    public function scopeWhereNotifiable($query, $notifiableId)
    {
        return $query->whereIn('notifiable_id', (array) $notifiableId);
    }
    
  • 检查调用通知查询的业务代码
    比如你在获取用户未读通知时,有没有直接传单个整数的情况?比如旧代码:

    $user->unreadNotifications()->where('notifiable_id', 1)->get();
    

    换成whereIn并把参数改成数组就好:

    $user->unreadNotifications()->whereIn('notifiable_id', [1])->get();
    
  • 清理缓存并刷新依赖
    如果没自定义模型,可能是框架升级后缓存的旧逻辑在捣乱,跑这几个命令试试:

    php artisan cache:clear
    php artisan config:clear
    composer dump-autoload
    
  • 检查第三方通知扩展包
    如果你用了比如laravel-notification-channels系列的第三方通知通道,看看这些包的版本是不是和你升级后的Laravel兼容,把它们更到最新的兼容版本就行。

要是以上都没解决,建议翻下Laravel对应升级版本的官方文档,看看通知模块有没有其他变更点需要适配。

内容的提问来源于stack exchange,提问作者Juluri Vinay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:01:06