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
相关产品推荐
相关产品推荐

