我需要一个代码建议。
基本上,我正在开发一个需要在数据库中进行大量联接和建立关系的系统。当前,在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();
有人可以建议一种更好的方法来处理这种查询吗?因为它在我的控制器中变得重复。
答案 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。