Оптимизировать запрос в Laravel на большом диске

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

Я помещаю вас в контекст, у нас есть три таблицы:

  • Пользователи
  • Седес
  • UsersSedes (сводка) [user_id, sedes_id]

В настоящее время мне нужно показать в списке (Datatable) всех пользователей, которые содержат в своих сеансах одно из мест, настроенных в активном пользователе (администраторе).

Пример: Админ, зарегистрированные и активные сеансы - это A и B (также есть C и D) Список: Пользователь 1 с sede A Пользователь 2 с sede B Пользователь 3 с sede B Пользователь 4 с sede B

Не знаю, объясню ли ...

Проблема в том, что в моей таблице около 2000 записей, поскольку я запрограммировал, что для управления данными требуется много времени, поскольку она выполняет 2000 запросов.

РЕДАКТИРОВАТЬ На самом деле я использую foreach для создания массива с данными, например:

$ pacientes = Usuario :: with (['sedes']) -> где ('role_id', 3) -> get ();

    $sedesHabilitadas = auth()->user()->sedes->pluck('id')->toArray();

    $habilitados = array();


     foreach($pacientes as $paciente)
    {
      if ( in_array($paciente->sedes->pluck('id')->first(), $sedesHabilitadas))
        {
            array_push($habilitados, $paciente);
        }      

    }    

Как вы загружаете пользователей, которые производят 2000 запросов?

M Khalid Junaid 22.05.2018 08:31

опубликуйте свой запрос, который вы используете

Chamara Abeysekara 22.05.2018 08:42

Похоже, вы сталкиваетесь с Laravel N + 1 выпуск, который решает эту проблему с помощью активной загрузки.

apokryfos 22.05.2018 08:47

Уверен, что проблема N + 1, но не знаю, как ее решить по тематике седов. Спасибо...

Valentin Ayesa 22.05.2018 10:10

Любая идея? :-( Благодарность

Valentin Ayesa 22.05.2018 11:32

Можете ли вы показать отношение вашей модели к седам?

Oluwatobi Samuel Omisakin 22.05.2018 13:21
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
6
46
1

Ответы 1

Похоже, вам нужен sedes, а где role_id = 3 и user_id = active user? В этом случае вы можете просто добавить ограничение where с основным запросом:

$habilitados = Usuario::where('role_id', 3)
    ->where('user_id', auth()->user()->id)
    ->with(['sedes'])->get();

Это должно дать вам пользователей с их «седами». В противном случае, если вы имеете в виду, что он должен возвращать Users :: с их 'sedes', которые имеют те же 'sedes', что и у администратора, вы можете подумать об этом:

$sedesHabilitadas = auth()->user()->sedes->pluck('id')->toArray();
$pacientes = Usuario::with(['sedes' => function($query) use (sedesHabilitadas){
        $query->whereIn('id', $sedesHabilitadas);
    ])->where('role_id', 3)->get();

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

Если это не так, дайте мне знать, и мне, возможно, придется удалить этот ответ.

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