SQL/Laravel: Получение родителей в древовидной структуре данных

Всем привет) Использую Laravel, MariaDB.

К примеру есть у нас такая таблица, допустим categories.

id name _lft _rgt parent_id path is_folder
1373 Окна 1 10 NULL 1373 1
1374 Стеклопакет 2 7 1373 1373.1374 1
1375 Фурнитура 8 9 1373 1373.1375 1
1376 Установка 3 4 1374 1373.1374.1376 0
1377 Регулировка 5 6 1374 1373.1374.1377 0

Модель Categories использует трейт Kalnoy\Nestedset\NodeTrait. В коде ниже билдер запроса уже содержит базовые фильтры (например по name)

if (!empty($filters['recursiveSearch']) && CommonService::parseBoolean($filters['recursiveSearch']) === true) {
    /** @var QueryBuilder $query */
}

Нужно чтобы при передаче параметра recursiveSearch выводились не только подходящие под фильтр значения, но и все их родители.

Например: по фильтру name=регулир получим строку Регулировка. при recursiveSearch также нужно получить Окна и Стеклопакет.

Изначально я думал сделать просто with('ancestors'), но результат попадает в релейшны, а должен в основной запрос.

Потом я сделал доп запрос, получил результат первой выборки, получил pluck('ancestors') и уже их айдишники подставил в результирующий запрос. Это сработало, но если в первоначальной выборке будет к примеру 1000 записей и у каждой по 3 родителя то в итоге будет where на 3000 айди.


Также в запросе может быть фильтр parentId. Если parentId=null&name=регулир&recursiveSearch=true то должно вернуть Окна

Прошу помощи :)


Ответы (0 шт):