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

Laravel 8 如何为Eloquent模型基于关联模型定义active查询作用域

你可以直接使用Laravel Eloquent内置的has()方法实现需求,该方法基于你已经定义好的关联关系做存在性校验,所有过滤逻辑在SQL层面执行,不会拉取冗余数据,也不需要你手动编写关联字段的查询逻辑:

public function scopeActive(\Illuminate\Database\Eloquent\Builder $query)
{
    return $query->has('children');
}

has('children')的底层会自动统计Parent对应的Child关联记录数量,仅返回关联数量≥1的Parent记录,就算1000条Parent中只有1条存在关联子记录,最终也只会拉取这1条有效数据,不会产生资源浪费。

如果你后续需要增加对关联子记录的条件过滤(比如仅统计状态为启用的子记录),可以替换为whereHas()方法:

public function scopeActive(\Illuminate\Database\Eloquent\Builder $query)
{
    return $query->whereHas('children', function (\Illuminate\Database\Eloquent\Builder $childQuery) {
        // 这里可以增加子记录的过滤条件
        $childQuery->where('status', 1);
    });
}

内容的提问来源于stack exchange,提问作者Matt Komarnicki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:18:04