Laravel中whereIn与where/orWhere组合查询结果异常求助
Laravel查询逻辑修正:whereIn后正确组合where/orWhere条件
问题根源是逻辑运算符优先级导致的查询逻辑错误。你当前的代码生成的SQL等价于:
WHERE user_id IN (...) AND something = 0 OR somethingElse = 1 OR (...)
OR运算符会打破whereIn与后续条件的绑定关系,只要满足任意一个OR条件,即使user_id不在指定数组中,数据也会被返回。
修正方案
把所有需要用OR组合的条件包裹在一个闭包的where方法内,让整个OR条件组和whereIn形成AND逻辑关系,最终生成的SQL会是:
WHERE user_id IN (...) AND (something = 0 OR somethingElse = 1 OR (...))
修正后的代码:
return Galleries::whereIn('user_id', $this->myMethod()->pluck('id')) ->where(function($query) { $query->where('something', 0) ->orWhere('somethingElse', 1) ->orWhere(function($subQuery) { /* 其他代码 */ }); }) ->limit($limit);
额外优化
原代码中$this->myMethod()->get()->pluck('id')可以简化为$this->myMethod()->pluck('id')——直接在查询构建器上调用pluck,无需先将结果转为集合,这样能减少内存消耗,同时生成更高效的SQL语句。
内容的提问来源于stack exchange,提问作者wtsuport
相关产品推荐
相关产品推荐

