一次编写多个laravel查询

一次编写多个laravel查询,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()->cou

我是新来的拉威尔,我只是想知道是否有任何方法可以有效地重写这段代码

$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();
试试这个:

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

$answer = SurveyAnswer::whereId('answer_1', $matches)->groupBy('answer_1')->get();
首先获取数据:

$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查询,而不是五个查询。

您可以使用带有case表达式的agreegate函数轻松完成,因为mysql不支持本机数据透视函数 下面是一个示例,请尝试根据您的需求进行重写,并直接在数据库中运行它,如果它有效,则可以将其与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

嗨,谢谢你的回答,两个都有效。如果我的问题不完整,我很抱歉。但我要做的是计算表中的特定数据并将其显示在页面中。我有20个不同问题的疑问。每个问题有5个答案。我想数一数每个答案被记录了多少。我只是想知道是否有更好的方法,这样我就不必写同样的代码行20次。非常感谢您抽出时间。