[英]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.