Я пытаюсь создать таблицу представления SQL в Laravel 5.4. Я исследовал некоторые способы создания таблицы, однако большинство решений привели к написанию запросов 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, есть ли какой-нибудь способ, которым я мог бы сделать все это и сохранить результат в таблице представления, чтобы я мог в следующий раз, когда мне не нужно выполнятьтот же запрос, но получить данные из таблицы, чтобы сократить время загрузки?