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

Laravel Eloquent如何获取同一关联的不同状态集合及对应计数

这个需求完全可以实现。你之前的写法无法运行的核心原因是:with()方法不支持直接对同一个关联使用as别名重命名加载,该别名语法仅在withCount方法中有效。

正确实现方案

步骤1:在Post模型中定义分状态的独立关联

首先在app/Models/Post.php中新增两个关联方法,分别对应不同状态的评论:

public function commentsActive()
{
    return $this->hasMany(Comment::class)->where('marked_as', 'active');
}

public function commentsNotActive()
{
    return $this->hasMany(Comment::class)->where('marked_as', 'not_active');
}

步骤2:调整查询语句

直接加载新定义的两个关联即可,withCount也可以简化写法无需重复写条件闭包:

Post::where('id', $id)
    ->with(['commentsActive', 'commentsNotActive'])
    ->withCount(['commentsActive', 'commentsNotActive'])
    ->firstOrFail();

最终取值方式

查询得到Post实例后,可以通过以下属性获取对应数据:

  • 激活状态评论集合:$post->comments_active
  • 未激活状态评论集合:$post->comments_not_active
  • 激活状态评论计数:$post->comments_active_count
  • 未激活状态评论计数:$post->comments_not_active_count

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:15:04