2017-06-10 56 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(); 
... 

該代碼會產生只有一個DB查詢而不是五個。

0

您可以輕鬆地與CASE表達式的agregate功能做到這一點,因爲MySQL的不列入支持原生旋轉功能 下面是一個示例,並嘗試根據您的要求重寫,並直接RUNT它與數據庫,如果它的工作原理,那麼你可以使用它與laravel原始的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