Как ограничить глубину выборки в Laravel?

Доброго времени суток коллеги, подскажите как в Laravel 7 можно ограничить выборку древовидной структуры, суть идеи просто регистрация пользователей происходит друг под друга как в партнерских программах. За основу я взял рекурсивный вывод.
В модельке у меня
public function children()
    {
        return $this->hasMany(User::class);
    }
    public function childrenRef(){
        return $this->hasMany(User::class)->with('children');
    }


и в контроллере я просто вызываю
$users = User::where('user_id', 1)->with('childrenRef')->get();


В переменную user приходит массив юзеров вложенных друг в друга
например:
us1
--us2
--us3
------us4
----------us5
--us7
Получается 4 уровня вложенности
А мне например нужно получить только 3
Нашел 1 способ это в шаблоне в blade у foreach есть условие
@if ($loop->depth >= 3)
      @break
@else

Но минус данного решения очевиден, так как в шаблон передается уже готовый массив, и когда пользователей будет 5-10к в совокупности они составят уровней 15 то еще терпимо для запроса к базе
А если пользователей будет свыше 30к то сколько же будет обрабатываться запрос к базе что бы вытянуть все это.
Исходя из всего вопроса, можно ли как то ограничить глубину вложенности, на моменте запроса выборки из базы данных.
  • Вопрос задан
  • 97 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы