首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >处理多个查询和连接的Laravel最佳实践

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

Stack Overflow用户
提问于 2019-10-15 03:19:46
回答 1查看 658关注 0票数 0

我需要一个密码建议。

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

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

代码语言:javascript
运行
复制
 $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();

有人能建议一种更好的方法来处理这类查询吗?因为它会在我的控制器上重复出现。

EN

回答 1

Stack Overflow用户

发布于 2019-10-15 08:58:19

使用querybuilder而不是雄辩是可以的,因为它更快,有时更有说服力,无法处理复杂的查询。此外,避免使用DB::raw,因为它容易使用sql注入。请参阅本文https://kursuswebprogramming.com/perbedaan-eloquent-dan-query-builder-laravel/

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

让我给你看一些比较

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

代码语言:javascript
运行
复制
<?php

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

查询生成器(执行时间: 938 ms,执行查询: 1000)

代码语言:javascript
运行
复制
<?php
Route::get("test",function(){
    for($i=0;$i<1000;$i++){
         DB::table("countries")->insert(["label"=>$i." Row"]);
    }
});
?>

现在,这证明了Query比雄辩快0.5秒。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58386757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档