2016-09-14 2 views
0

私の最初のステップを雄弁にして、私はいくつかのデータを取得して同時にいくつかの条件を数えるクエリを達成しようとしています。同一クエリ内で多目的に選択する

この生のSQL文は

SELECT * 
FROM photos, 
(SELECT COUNT(*) FROM photos where type = 1 and published =1 group by type) as qA, 
(SELECT COUNT(*) FROM photos where type = 2 and published =1 group by type) as qP 
where product_id = 7 
and published = 1 

を期待しかし、使用して写真のモデルは、私が「生」の文章を除くと同じ結果に

Photo::select(*, 
Photo::raw('count(*) where type = 1 and published =1 group by type as qA), 
Photo::raw('count(*) where type = 2 and published =1 group by type as qP)) 
->where ('product_id',7) 
->where('published', 1) 
->get() 

を得ることができないように動作し、このクエリは動作しますが、Iそれらの「タイプ」事象を数える必要がある。

ご参考までにご案内ありがとうございます。

+0

試し書きを試みることができる - > toSql()の代わりに - >を取得()とは、SQL同等だものを印刷します。必要なものを変更することができます(クエリを再作成するときはいつでも解決します) – abr

答えて

0

本当にすべてを1つのクエリで取得する必要はありますか?あなたのアプリケーションには意味がありますか?私は、これらのタイプのカウントは、実際にテーブルの状態に関する全体的な情報ではなく、取り出しているレコード(product_id = 7)に関する情報ではないと思います。これは理にかなっている場合

、あなたが

$photo = Photo::where ('product_id',7) 
    ->where('published', 1) 
    ->get(); 

$types_count = Photo::where('published', 1) 
    ->selectRaw('type, COUNT(*) AS count') 
    ->groupBy('type') 
    ->get() 
    ->keyBy('type'); 

$qA = $types_count[1]->count; 
$qP = $types_count[2]->count; 
関連する問題