Laravel 8中如何验证MySQL数据表内是否存在指定哈希码
问题根因
你遇到的问题由两个错误导致,和Laravel版本升级没有直接关联:
hashExists方法没有返回查询结果,调用该方法永远得到null,判断null < 1永远成立,直接触发跳转逻辑where条件的传参格式不符合Laravel查询构造器要求,导致查询条件永远不匹配
修复步骤
1. 修正Form控制器的hashExists方法
修改后的代码如下:
/** * 统计符合指定ID的条目数量 */ public function hashExists($hashCode) { return Referralrequestapplication::where('blocked', 0) ->where('image_reference', $hashCode) ->count(); }
如果你习惯用数组传多个where条件,正确写法是
where([['blocked', 0], ['image_reference', $hashCode]]),要把所有条件包在同一个外层数组里。
2. 可选性能优化
可以直接用Laravel提供的exists方法替代count判断,查询性能更高:
public function hashExists($hashCode) { return Referralrequestapplication::where('blocked', 0) ->where('image_reference', $hashCode) ->exists(); }
对应调用处的判断逻辑也可以简化为:
if(!$hash_exists) { // 原有跳转逻辑 }
额外注意
你的模型$fillable数组里写的字段是review,但迁移文件中对应的字段是reviewed,后续做写入操作时会出现字段不存在的错误,建议同步修正。
内容的提问来源于stack exchange,提问作者Yemi A.
相关产品推荐
相关产品推荐

