有没有一种方法可以在Laravel中创建SQL视图表而无需编写Raw SQL查询?

时间:2019-10-24 08:30:26

标签: php mysql laravel-5 sql-view

我正在尝试在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变量中获得了所需的结果,有什么办法可以将所有结果保存到视图表中,以便下次我不需要执行相同的查询但可以获取数据从表中删除,这样可以减少加载时间?

0 个答案:

没有答案
相关问题