WhereHas делает N+1 запрос))
Не делает. N+1 происходит, если в цикле у тебя дергается релейшн, который ранее не был подгружен через игер лоад
Да без разницы подгружен или нет, whereHas в любом случае сделает просто +1 запрос и это нормально🌚
+1 и n+1 - это разные вещи
Ну да
Он делает n+1 не явно, а на уровне БД. Если посмотреть что там делается, то получается вложенный select. На больших таблицах выборка просто падает по таймауту
чем вложенный запрос это н+ 1 ?
Количество обработок таблички в разы увеличивается.
Почитай плиз что такое n+1
Начитан, спасибо
но whereHas это не н + 1 )
Ну я написал что не явно))
whereHas не может добавить лишние 100 запросов в БД, как это легко может n+
Вот
а потом перешло сюда :D
inRandomOrder() не очень еще
а с ним то что?
Долго выполняется
Ну вот… потом меня начали тыкать носом в документации))
ну я про поведение спрашивал
А, сорри
та не, ссылки ж то не кидали :D
Блин)) ну да)
Тогда n+1 это твой вариант
чего?
Потому что ты ожидаешь что у тебя выполниться допустим 5 запросов, но в итоге может быть 150
ну и где такое поведение?
Например $users = User::query()->get(); foreach ($users as $user) { $user->getRelation1(); $user->getRelation2(); $user->getRelation3(); $user->getRelation4(); }
)))
Это уже криворукость, в не плохое поведение ёлки
Это пример n+1
Это пример 4*n +1
Ну вообще, да
Обсуждают сегодня