Laravel的Where查询如何处理可选参数,识别传入值与运算符?
Laravel Where方法双参数识别逻辑
Laravel查询构造器的where方法内部会优先对入参做预处理调整,核心处理逻辑如下:
- 当你传入2个参数调用
where('id', 2)时,对应方法定义的入参初始取值为:$column = 'id'$operator = 2$value = null$boolean = 'and'
- 方法内部首先会判断
$value是否为null,如果满足条件就会自动调整参数映射:- 把原本赋值给
$operator的第二个传入参数(即示例中的2)设置为查询值$value - 给运算符
$operator默认赋值为=
- 把原本赋值给
- 调整后的最终参数等价于
where('id', '=', 2),和完整三参数调用的效果完全一致。
对应的核心源码处理逻辑简化后如下:
if (is_null($value)) { $value = $operator; $operator = '='; }
补充说明:如果需要使用不等于、大于等其他运算符,必须传入第三个查询值参数,此时$value不为空,就不会触发上述参数调整逻辑。
内容的提问来源于stack exchange,提问作者Bastiyan
相关产品推荐
相关产品推荐

