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
相关产品推荐
相关产品推荐

