Laravel使用laravelista/comments包时Comment模型save成功但未入库问题
laravelista/comments 评论未入库问题排查方向
检查模型主键配置
首先确认Laravelista\Comments\Comment模型的主键配置是否和数据库迁移匹配:- 查看模型是否修改了
$primaryKey属性,非默认id的话要确保对应表存在该主键字段 - 确认模型
$incrementing属性是否为true,如果设置为非自增但未手动赋值主键,会出现save返回true但主键为空的情况 - 执行
php artisan migrate:status确认评论表迁移已经执行,表结构字段符合包的要求
- 查看模型是否修改了
检查数据库事务状态
在$comment->save()后追加代码dd(\DB::transactionLevel()),如果返回结果大于0,说明当前请求存在未提交的事务,请求结束后事务自动回滚会导致数据未持久化,即使save返回true也不会入库。需要排查全局中间件、业务前置代码中是否存在未正确提交/回滚的事务逻辑。检查模型事件拦截
排查是否有自定义的saving、saved事件监听器或者模型观察者,有没有在事件回调中执行了删除操作、或者返回false中断了写入流程。可临时在Comment模型的save方法入口打断点,确认整个写入流程没有被额外逻辑拦截。检查实际执行的SQL语句
开启Laravel的SQL日志,在save操作后打印dd(\DB::getQueryLog()),确认实际生成的INSERT语句对应的表名、字段值是否正确,有没有执行到INSERT步骤,语句执行是否报错。如果没有生成INSERT语句,说明写入逻辑被上层拦截。检查软删除与多库配置
- 确认
Comment模型是否开启了软删除,如果开启请用Comment::withTrashed()->get()查询是否存在被意外软删除的评论记录 - 确认
Comment模型是否单独配置了$connection数据库连接属性,排查是否写入到了其他非预期的数据库中。
- 确认
内容的提问来源于stack exchange,提问作者Daniel Kennedy
相关产品推荐
相关产品推荐

