如何在Laravel Eloquent的loadCount()中为同一关联计数设置别名
解决Laravel中loadCount同时统计多状态关联计数的方案
方案一:使用as为计数指定别名(推荐)
直接在loadCount的数组键中,通过关联名 as 别名的形式,为不同条件的计数设置独立别名,即可同时加载多个状态的计数:
$post->loadCount([ // 统计已审核评论数,别名为approved_comments_count 'comments as approved_comments_count' => fn($query) => $query->where('approved', true), // 统计未审核评论数,别名为unapproved_comments_count 'comments as unapproved_comments_count' => fn($query) => $query->where('approved', false), // 其他需要加载的关联计数 'something', 'else' ]);
之后直接通过模型属性访问统计结果:
// 获取已审核评论数 $approvedCount = $post->approved_comments_count; // 获取未审核评论数 $unapprovedCount = $post->unapproved_comments_count;
方案二:在模型中定义专属关联
如果这类多状态统计逻辑需要多次复用,可以在Post模型中定义两个针对不同状态的关联:
// Post.php 模型文件 public function approvedComments() { return $this->hasMany(Comment::class)->where('approved', true); } public function unapprovedComments() { return $this->hasMany(Comment::class)->where('approved', false); }
之后直接加载这两个关联的计数即可:
$post->loadCount([ 'approvedComments', 'unapprovedComments', 'something', 'else' ]);
访问结果时使用关联名对应的计数属性:
$approvedCount = $post->approved_comments_count; $unapprovedCount = $post->unapproved_comments_count;
内容的提问来源于stack exchange,提问作者norr
相关产品推荐
相关产品推荐

