如何直接在数据透视表上使用count-aggregate函数?

时间:2016-09-05 15:56:59

标签: laravel-5 eloquent

我在Eloquent / Laravel中寻找SQL语句中的等价物

// Picture model
public function labels() { return $this->belongsToMany('App\Label'); }

// Label model
public function pictures() { return $this->belongsToMany('App\Picture'); }

并且不知道该怎么做。具体来说,我在Laravel中定义了以下多对多关系:

$label->pictures->count()

如果我想知道每个标签的使用频率,我可以简单地浏览所有标签并为每个标签调用label_picture: label_id: 1, picture_id: 1 label_id: 1, picture_id: 2 label_id: 2, picture_id: 7 label_id: 2, picture_id: 3 label_id: 1, picture_id: 12 label_id: 3, picture_id: 7 label_id: 2, picture_id: 2 label_id: 1, picture_id: 7 label_id: 3, picture_id: 12 。但是我不希望对整个图片集执行此操作,但仅针对选定的图片列表(例如:开头的SQL示例中的ids 7和12)。

我的数据透视表如下所示:

SELECT label_id, COUNT(*) FROM label_picture WHERE picture_id IN (7,12) GROUP BY label_id

和SQL语句

label_id    COUNT(*)
1           2
2           1
3           2

会导致

{{1}}

我如何在Eloquent / Laravel中执行此操作?

1 个答案:

答案 0 :(得分:1)

我不确定这样做的任何雄辩的方法,但您可以使用QueryBuilder执行此操作,如下所示:

$picture_ids = [7,12]; //replace this with your way to get picture ids
$labels = DB::table('label_picture')
            ->selectRaw('label_id,count(*) as total')
            ->whereIn('picture_id',$picture_ids)
            ->groupBy('label_id')
            ->get();