Laravel查询构建器多条件子句:如何按请求添加多个查询子句
优化Laravel查询构建器的条件子句写法
嘿,这事儿好办!你完全没必要重复写多次when来判断同一个条件——直接把多个查询子句塞进同一个when闭包里就行,代码瞬间清爽不少,还能减少冗余判断。
优化后的写法示例
你原来的重复判断可以改成这样:
->when($marketplace_id != 0, function ($query) use ($marketplace_id) { // 在同一个闭包里连续添加多个查询子句 return $query->join('seller as b', 'a.seller_id', '=', 'b.seller_id') ->join('marketplaces as c', 'c.marketplace_id', '=', 'b.marketplace_id'); });
为什么这么写可行?
Laravel的查询构建器本身就是链式调用的设计,在when的闭包里,你可以对传入的$query实例连续调用各种查询方法(join、where、select等等),最后返回修改后的$query即可。这样既避免了重复判断同一个条件,也让代码逻辑更集中、更易读。
额外小提示
如果后续需要在这个条件下添加更多子句,直接在闭包里继续链式调用就行,比如再加个针对性筛选:
->when($marketplace_id != 0, function ($query) use ($marketplace_id) { return $query->join('seller as b', 'a.seller_id', '=', 'b.seller_id') ->join('marketplaces as c', 'c.marketplace_id', '=', 'b.marketplace_id') ->where('c.marketplace_id', $marketplace_id); // 新增的筛选条件 });
内容的提问来源于stack exchange,提问作者SNaRe
相关产品推荐
相关产品推荐

