我正在尝试在Laravel 5.4中创建一个SQL视图表。我研究了一些创建表的方法,但是大多数解决方案导致编写Raw SQL查询来创建表。在我的情况下,我需要联接表,比较表中多个数据中的数据,并对具有特定值的数据数进行计数,这是我从Raw SQL查询中很难做到的。在雄辩的ORM中获取数据并执行所需的操作并创建数据结构数组之后,有没有办法创建视图表。
$marksCount = \App\Models\StudentsClassEight::join('school_class_eight_marks as m', 'students_class_eight.id', '=', 'm.student_id')
->join('mast_schoollist as sl', 'students_class_eight.sch_num', '=', 'sl.sch_num')
->where('sl.sch_year', '=', $year)
->where('students_class_eight.sch_year', '=', $year)
->where('in_school', '=', 1)
->where(['province_code' => $provinceCode, 'district_code' => $districtCode, 'locallevel_code' => $localLevelCode])
->groupBy(['sch_num', 'students_class_eight.id'])
->selectRaw(
'sl.province_code,sl.district_code,sl.locallevel_code,sl.nm_sch,students_class_eight.sch_num,students_class_eight.id,students_class_eight.sch_year,students_class_eight.caste,students_class_eight.gender,COUNT(m.practical_marks) as practical'
)
->get();
$data = ($marksCount->groupBy('sch_num'));
foreach ( $data as $key => $datum ) {
$grouped_data = $datum->groupBy('caste')->map(function($mapped_data){
return $mapped_data->groupBy('gender');
});
$total_female = 0;
$total_male = 0;
$total = 0;
foreach($grouped_data as $g_key => $g_value){
$count[$key][$g_key]["Male"] = isset($g_value['Male']) ? count($g_value['Male']) : 0;
$count[$key][$g_key]["Female"] = isset($g_value['Female']) ? count($g_value['Female']) : 0;
$count[$key][$g_key]["Total"] = $count[$key][$g_key]["Male"] + $count[$key][$g_key]["Female"];
$total_male = $total_male + $count[$key][$g_key]["Male"];
$total_female = $total_female + $count[$key][$g_key]["Female"];
$total = $total + $count[$key][$g_key]["Total"];
}
$count[$key]["Sum"]["Male"] = $total_male;
$count[$key]["Sum"]["Female"] = $total_female;
$count[$key]["Sum"]["Total"] = $total;
$list[$key]['practical'] = 0;
$subjects = SchoolSubjects::where('sch_num', '=', $key)->selectRaw('count(subject_id) as count')->first('count');
foreach ( $datum as $d ) {
if ( $d->practical == $subjects->count ) {
$list[$key]['practical'] += 1;
$list[$key]['nm_sch'] = $d->nm_sch;
$list[$key]['under'] = LocalLevel::where([
["p_code", "=", $d->province_code],
["d_code", "=", $d->district_code],
["ll_code", "=", $d->locallevel_code]
])->first()->ll_name;
}
}
}
return [$list, $count];
我在$ count变量中获得了所需的结果,有什么办法可以将所有结果保存到视图表中,以便下次我不需要执行相同的查询但可以获取数据从表中删除,这样可以减少加载时间?