2016-09-05 17 views
0

私は、SQL文のカウント集計関数をピボットテーブルで直接使用するにはどうすればよいですか?

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

に雄弁/ Laravelの等価を探していますし、これを実行する方法がわかりません。私は、各ラベルイストの使用頻度を把握したい場合は、私は単純にすべてのラベルを歩くと、ラベルごと$label->pictures->count()を呼び出すことができます

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

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

:具体的に私はLaravelで定義された以下の多対多の関係を持っています。しかし、私は、写真の全セットについてこれを行うのではなく、選択された写真のリスト(例えば、最初のSQLの例のids7および12)についてのみ行う。私は雄弁/ Laravelでこれを行うにはどうすればよい

label_id COUNT(*) 
1   2 
2   1 
3   2 

につながる

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文の

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

私のピボットテーブルには、次のようになりますか?

答えて

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(); 
+0

作品。本当にありがとう。私は、ピボットテーブルにアクセスするためのエレモクな方法はないと思っていましたが。 – Steevie

関連する問題