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

Laravel中使用withCount做关联统计时如何添加draft=1的过滤条件

Laravel 中实现 withCount 仅统计符合条件的关联记录

你可以直接在withCount方法中传入带查询条件的闭包来筛选需要统计的关联记录,具体修改方案如下:

方案1:单次查询直接加筛选条件

直接对articles关联追加draft=1的筛选逻辑即可:

$categories = BlogCategory::withCount(['articles' => function ($query) {
    $query->where('draft', 1);
}])->get();

查询完成后你依然可以通过每个分类对象的articles_count属性,获取到对应分类下draft值为1的文章数量。

方案2:封装独立关联实现复用

如果需要频繁统计分类下draft为1的文章数量,你可以直接在BlogCategory模型中定义一个独立的关联关系,后续直接调用即可:

  1. 先在BlogCategory模型中新增关联方法:
// App\Models\BlogCategory.php
public function draftArticles()
{
    return $this->hasMany(Article::class)->where('draft', 1);
}
  1. 调用时直接使用新关联做统计:
$categories = BlogCategory::withCount('draftArticles')->get();

这种方式获取到的统计值会保存在draft_articles_count属性中,无需每次写重复的筛选逻辑,复用性更高。

原理说明:Laravel的withCount方法支持传入键为关联名、值为查询闭包的数组结构,闭包内可以对关联的查询追加任意筛选条件,最终统计的时候只会统计满足筛选条件的关联记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:06:02