Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel处理多个查询和连接的最佳实践_Php_Laravel - Fatal编程技术网

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

Php Laravel处理多个查询和连接的最佳实践,php,laravel,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'

我需要一个代码建议

基本上,我正在开发一个系统,它需要数据库中的大量连接和关系。目前在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();

有谁能提出更好的方法来处理这类查询吗?因为它在我的控制器中变得重复

使用querybuilder而不是Elotent是可以的,因为它更快,而且有时Elotent无法处理复杂的查询。另外,避免使用
DB::raw
,因为它易于sql注入。请参阅本文

为了避免重复代码,必须创建自定义函数或库,然后可以在每个控制器中使用它

让我给你看一些比较

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


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



现在,这证明查询生成器比雄辩快0.5秒。

看起来您需要使用关系。请参阅。很抱歉,是否仍然可以使用laravel关系创建3个或更多表?您可以根据需要创建任意多个关系或联接。你的选择是基于你的代码,真的。如果代码变得重复,请创建库或服务,并从控制器调用它,而不是复制粘贴它。如果只有几个参数发生变化,只需确保您的全局函数能够适应多种情况。我每天做很多的加入,没有什么问题。我更喜欢它们而不是6种关系,因为我的问题是1而不是6。这与这个问题有什么关系?我刚刚回答了他我的建议。我认为他的方法很好,因为他使用的是querybuilder。我还回答了他对重复代码问题的担忧,先生。
<?php

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