2017-06-10 3 views
1

laravelに新しいが、このコードを効率的に書き換える方法があるかどうかを知りたいだけですか?複数のlaravelクエリを一度に書く

$answer1 = SurveyAnswer::where('answer_1','=','1')->get()->count(); 
$answer2 = SurveyAnswer::where('answer_1','=','2')->get()->count(); 
$answer3 = SurveyAnswer::where('answer_1','=','3')->get()->count(); 
$answer4 = SurveyAnswer::where('answer_1','=','4')->get()->count(); 
$answer5 = SurveyAnswer::where('answer_1','=','5')->get()->count(); 
+0

こんにちは、両方の回答がありがとうございました。私の質問が不完全であれば申し訳ありません。しかし、何をしようとしている私のテーブル内の特定のデータを数え、ページに表示することです。私はさまざまな質問から20の質問を持っています。それぞれの質問には5つの答えがあります。私は各回答のどれが記録されたのかを数えたいと思う。私は、同じコード行を20回書く必要がないように、より良い方法があるかどうかを知りたいだけです。あなたのお時間をありがとうございました。 – Cath

答えて

0

これを試してみてください:

$matches = [1,2,3,4,5]; 

$answer = SurveyAnswer::whereId('answer_1', $matches)->groupBy('answer_1')->get(); 
1

は最初のデータを取得:

$answers = SurveyAnswer::whereIn('answer_1', [1, 2, 3, 4, 5])->get(); 

が次にロードされたコレクションを使用して答えを数える:

$answer1 = $answers->where('answer_1', 1)->count(); 
$answer2 = $answers->where('answer_1', 2)->count(); 
... 

このコードが生成されますちょうど1 DBクエリではなく5つの

0

mysqlがネイティブピボット関数をサポートしていないので、ケース式を含むagregate関数を使用すると簡単に実行できます 以下はサンプルです。必要に応じて書き換えて、データベースに対して直接実行してください。 laravel raw sqlで使用することができます。

select id, 
sum(case when value = 1 then 1 else 0 end) ANSWER1_COUNT, 
sum(case when value = 2 then 1 else 0 end) ANSWER2_COUNT 
from survey 
group by answer 
関連する問題