Laravel处理多个查询和联接的最佳实践

时间:2019-10-15 03:19:46

标签: php laravel

我需要一个代码建议。

基本上,我正在开发一个需要在数据库中进行大量联接和建立关系的系统。当前,在Laravel中,我正在使用查询生成器进行应用程序中的数据库查询。

目前,我在数据库中有这个查询示例。

 $approved = DB::table('employee_overtimes as eo')
            ->select('eo.id as id', 'eo.employee_id as eo_employee_id', 'eo.overtime_date', 'eo.time_in', 'eo.time_out', 'eo.approver_id', 'eo.remarks', 'eo.status',
                'firstname','lastname','employee.employee_no', 'employee.id as employee_id', 'eo.created_at')
            ->join('employee' , 'employee.id', '=', 'eo.employee_id')
            ->where('eo.status', '=', 'Approved')
            ->orderByDesc('eo.created_at')
            ->orderBy('lastname', 'ASC')
            ->get();

有人可以建议一种更好的方法来处理这种查询吗?因为它在我的控制器中变得重复。

1 个答案:

答案 0 :(得分:0)

可以使用querybuilder代替雄辩,因为它更快,有时雄辩也无法处理复杂的查询。而且,请避免使用DB::raw,因为它易于进行SQL注入。请参阅本文https://kursuswebprogramming.com/perbedaan-eloquent-dan-query-builder-laravel/

出于对重复代码的关注,必须创建自定义函数或库,然后可以根据需要在每个控制器中使用它。

让我给你看一下比较

雄辩的ORM(执行时间:1.41 s,已执行查询:1000)

<?php

Route::get("test",function(){
    for($i=0;$i<1000;$i++){
         $t=new Country();
         $t->label=$i." Row";
         $t->save();
    }
}); 
?>

查询生成器(执行时间:938毫秒,执行的查询:1000)

<?php
Route::get("test",function(){
    for($i=0;$i<1000;$i++){
         DB::table("countries")->insert(["label"=>$i." Row"]);
    }
});
?>

现在,这证明了Query Builder比Eloquent快0.5 s。