You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Eloquent查询作用域:双条件控制结果及无数据场景处理

Laravel Eloquent 查询作用域优化方案

最优解决方案:添加永假条件返回空集

当两个条件都为假时,只需给查询添加一个永远不成立的条件,就能直接返回空结果集,避免返回所有数据。最简洁高效的写法是用whereRaw('1=0')(兼容性覆盖所有Laravel版本),Laravel 8+也可使用whereFalse()方法。

修改后的完整代码

写法一:保留原链式结构补全逻辑

public function scopeAvailable(Builder $query, bool $condition1, bool $condition2)
{
    return $query
        ->when($condition1, fn ($query) => $query->where('sum', '>', 10))
        ->when($condition2, fn ($query) => $query->where('avg', '<', 100))
        ->when(!$condition1 && !$condition2, fn ($query) => $query->whereRaw('1=0'));
}

写法二:提前判断双假情况,逻辑更直观

public function scopeAvailable(Builder $query, bool $condition1, bool $condition2)
{
    if (!$condition1 && !$condition2) {
        return $query->whereRaw('1=0');
    }

    return $query
        ->when($condition1, fn ($query) => $query->where('sum', '>', 10))
        ->when($condition2, fn ($query) => $query->where('avg', '<', 100));
}

说明

  • whereRaw('1=0')会生成WHERE 1=0的SQL语句,数据库会直接返回空结果,性能开销极小。
  • 写法二通过提前判断双假情况,减少了链式调用层级,逻辑更清晰。

内容的提问来源于stack exchange,提问作者Max Trunnikov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 15:35:24