Laravel сложный запрос
Требуется выполнить сложный запрос. Опишу проблему. Есть модель у который есть свойства type и 3 связи (relation) ( news post video). Мне требуется загрузить все модели и в зависимости от значение type использовать связь т.е. что то типа
if($models->type == 1) $models->with('video');
elseif($models->type == 2) $models->with('post');
это конечно не будет работать но абстрактно думаю поможет понять. Надеюсь смог объяснить
Ответы (1 шт):
Автор решения: Максим К
→ Ссылка
Проблем тут нет совсем.
// 1 сначала загружаешь модели (например 100 штук)
/** @var Illuminate\Database\Eloquent\Collection $models */
$models = MyAwesomeModel::where(/*...*/)->take(100)->get();
// 2 группируешь модели по типу (есть же такое поле)
$modelsGrouped = $models->groupBy('type');
/* получается коллекция типа
[
1 => [
[id=>1,type=>1],
[id=>3,type=>1]
],
2=>[
[id=>2, type=>2],
[id=>4, type=>2]
]
]
*/
// 3 при помощи метода коллекции load() загружешь нужные отношения
// тут используется хэлпер optional, который проксирует вызов метода `load`
// на коллекцию группы, или ничего не делает, если нет группы с заявленным типом
optional($modelsGrouped->get(/*type*/1))->load('video');
optional($modelsGrouped->get(/*type*/2))->load('post');