簡體   English   中英

Laravel 處理多個查詢和連接的最佳實踐

[英]Laravel Best Practice in handling Multiple Queries and Joins

我需要一個代碼建議。

基本上我正在開發一個需要在數據庫中進行大量連接和關系的系統。 目前在 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();

任何人都可以提出更好的方法來處理此類查詢嗎? 因為它在我的 controller 中變得重復。

可以使用查詢構建器代替 eloquent,因為它更快,有時 eloquent 無法處理復雜的查詢。 此外,避免使用DB::raw ,因為它容易被 sql 注入。 請參考這篇文章https://kursuswebprogramming.com/perbedaan-eloquent-dan-query-builder-laravel/

對於重復代碼的擔憂,您必須創建自定義 function 或庫,然后您可以根據需要在每個 controller 中使用它。

讓我給你看一些比較

Eloquent 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"]);
    }
});
?>

現在這證明查詢生成器比 Eloquent 快 0.5 秒。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM