Я знаю, что этот вопрос, вероятно, немного абсурден, но я застрял в нем в течение двух дней и прихожу сюда в поисках альтернативы тому, что я разработал в настоящее время.
Я помещаю вас в контекст, у нас есть три таблицы:
В настоящее время мне нужно показать в списке (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);
}
}
опубликуйте свой запрос, который вы используете
Похоже, вы сталкиваетесь с Laravel N + 1 выпуск, который решает эту проблему с помощью активной загрузки.
Уверен, что проблема N + 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.
Если это не так, дайте мне знать, и мне, возможно, придется удалить этот ответ.
Как вы загружаете пользователей, которые производят 2000 запросов?