Laravel Eloquent присоединиться к с - PullRequest
0 голосов
/ 20 ноября 2018

Я вижу, что объединение - это (по умолчанию внутреннее объединение) и оно возвращает все столбцы, но это занимает почти то же время, что и с ключевым словом только для 1000 данных.

$ user-> join («profile», «users.id», «=», «profiles.user_id») - генерирует следующий запрос.

select * from `users` inner join `profiles` on `users`.`id` = `profiles`.`user_id` where `first_name` LIKE '%a%'`

User :: with (‘profile’) - эта энергичная загрузка выводит следующий запрос

select * from `users` where exists (select * from `profiles` where `users`.`id` = `profiles`.`user_id` and `first_name` LIKE '%a%')

Каков наилучший способ вернуть список пользователей с нумерацией страниц для REST API? нетерпеливая загрузка кажется многообещающей, но с подзапросом.

если делать с энергичной загрузкой, это то, как я буду фильтровать. нужно использовать , где есть

if($request->filled('first_name')){
        $query->whereHas('profile',function($q) use ($request){
            $q->where('first_name','like','%'.request('first_name').'%');
        });
    }

но если используется Join, его строк кода меньше.

  if ($request->filled('first_name')) {
            $users = $users->where('first_name', 'LIKE', "%$request->first_name%");
        }

версия laravel - 5.7

1 Ответ

0 голосов
/ 20 ноября 2018

Eloquent - это реализация шаблона Active Record от Laravel, которая имеет все свои сильные и слабые стороны.Это хорошее решение для использования, когда вы обрабатываете одну сущность в режиме CRUD - то есть читаете из базы данных или создаете новую сущность, а затем сохраняете или удаляете ее.Вы получите много пользы от функций Eloquent, таких как грязная проверка (отправка SQL UPDATE только для полей, которые были изменены), моделирование событий (например, отправка административного предупреждения или обновление счетчика статистики, когда кто-то создал новую учетную запись), черты (временные метки, мягкие удаления, пользовательские черты) нетерпеливая / ленивая загрузка и т. д.

Но, как вы уже знаете, это связано с некоторой ценой производительности.Когда вы обрабатываете одну или несколько записей, вам не о чем беспокоиться.Но для случаев, когда вы читаете много записей (например, для таблиц данных, для отчетов, для пакетной обработки и т. Д.), Лучше использовать обычный DB.

Для нашего приложения мы делаем именно это - используя Eloquent Laravel в Интернете.формы для обработки одной записи и использования БД (с представлениями SQL) для извлечения данных для сеток, экспорта и т. д.

Когда дело касается производительности и роста приложения, для сравнения, возьмите награду заследующие таблицы:

Сравнение среднего времени ответа операции выбора между Eloquent ORM и Raw SQL

Среднее время ответа Eloquent ORM

Joins | Average (ms) 

1     | 162,2
3     | 1002,7
4     | 1540,0 

Результат среднего времени отклика операции выбора для Eloquent ORM

Среднее время отклика необработанного SQL

Joins | Average (ms)
1     | 116,4 
3     | 130,6 
4     | 155,2

Результат среднего времени ответа операции выбора для необработанного SQL

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