我在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中执行此操作?
答案 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();