Laravel软删除场景下MySQL NULL值查询无结果问题排查
问题分析与解决
你的查询拿不到那3条符合date_of_leaving = '2022-09-23 00:00:00'的记录,核心原因是Laravel软删除的默认行为:启用软删除后,框架会自动给所有查询追加deleted_at is null的条件,只返回未被软删除的记录。而你目标的3条记录deleted_at都有具体值(属于已软删除状态),所以被过滤掉了,和NULL被识别成字符串无关。
解决办法
根据需求选择对应方法:
- 包含已软删除的记录:如果要同时获取未删除和已软删除的记录,在查询链中添加
withTrashed():
$this->repository->pushCriteria(new WhereCriteria('date_of_leaving', $today))->withTrashed();
- 只获取已软删除的记录:如果仅需要那3条已软删除的记录,使用
onlyTrashed():
$this->repository->pushCriteria(new WhereCriteria('date_of_leaving', $today))->onlyTrashed();
调整后的查询示例
以withTrashed()为例,最终生成的SQL会移除自动追加的deleted_at is null条件:
select * from `employees` where `date_of_leaving` = ?
内容的提问来源于stack exchange,提问作者sai sai
相关产品推荐
相关产品推荐

