Laravel Eloquent JOIN против с

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

$ user-> join (‘profiles’, ‘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

Привет, Dev1234, обычно я использую то, что быстрее, и обычно сводится к тому, сколько мне нужно для манипулирования данными с помощью PHP. Ни один из способов не является неправильным, но лучше использовать самый быстрый и эффективный способ, поскольку, как только вы получите много данных, обработка может занять много времени.

Josh 20.11.2018 03:14

Убедитесь, что profiles.user_id является первой частью индекса или первичного ключа.

danblack 20.11.2018 03:34
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
10
2
7 613
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

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

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

Красноречивое среднее время ответа 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

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

Другие вопросы по теме