Laravel Notification中保存数据到数据库报getLogNameToUse返回null错误
问题原因
这个报错由你引入的第三方包 spatie/laravel-activitylog 触发:你在User模型中引入了LogsActivity Trait,但没有配置必填的日志名称参数,当你触发User模型的保存操作时,日志包调用getLogNameToUse()方法获取日志分类名称时拿到null值,不符合该方法要求的string类型返回值,因此抛出类型错误。
解决方案
你可以根据自身业务需求选择以下任意一种方案:
- 方案1:保留User模型的操作日志功能,在User模型中补充日志配置
在User类中增加日志名称配置项即可,可按需同时配置需要记录的字段:class User extends Authenticatable { use Notifiable, LogsActivity; // 新增以下配置 protected static $logName = 'user'; // 自定义日志分类名称,字符串类型即可 protected static $logAttributes = ['name', 'email', 'verification_link']; // 可选,指定要记录变动的字段,不配置默认记录所有字段变动 // 原有代码保持不变 protected $fillable = [ 'name', 'email', 'role_id', 'password', ]; ... } - 方案2:本次保存操作不需要记录日志,修改保存方法
将原有save()方法替换为saveQuietly(),该方法不会触发模型的保存事件,也就不会触发日志包的自动记录逻辑:
额外优化提示:public function toMail($notifiable) { $users = User::find($notifiable->id); $users->verification_link=$link; $users->saveQuietly(); ... }$notifiable本身就是当前触发通知的User实例,不需要再重复查询数据库,可直接修改$notifiable属性后保存即可 - 方案3:不需要对User模型做任何操作日志记录,直接移除对应的Trait
将User模型中use Notifiable, LogsActivity;里的LogsActivity删除即可。
内容的提问来源于stack exchange,提问作者user3653474
相关产品推荐
相关产品推荐

