Лучшая практика Laravel по обработке нескольких запросов и объединений - PullRequest
0 голосов
/ 15 октября 2019

Мне нужно предложение кода.

По сути, я разрабатываю систему, которая требует много соединений и связей в базе данных. В настоящее время в Laravel я использую Query Builder для запросов к базе данных в приложении.

В настоящее время у меня есть этот пример запросов в базе данных.

 $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();

Может ли кто-нибудь предложить лучший подход к обработке запросов такого типа? Потому что это становится повторяющимся в моем контроллере.

1 Ответ

0 голосов
/ 15 октября 2019

Можно использовать построитель запросов вместо eloquent, потому что он быстрее и иногда красноречивее не может обрабатывать сложные запросы. А также, избегайте использования DB::raw, потому что это склонно к инъекциям sql. Пожалуйста, обратитесь к этой статье https://kursuswebprogramming.com/perbedaan-eloquent-dan-query-builder-laravel/

И чтобы вы беспокоились о повторяющемся коде, вы должны создать свою пользовательскую функцию или библиотеку, а затем использовать ее в каждом контроллере по своему усмотрению.

Позвольте мне показать вам некоторые сравнения

Eloquent ORM (время выполнения: 1,41 с, выполненные запросы: 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 на 0,5 с быстрее Eloquent.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...