Возможно стоит поднять минимально MYSQL до 8.0?
MYSQL 8.0 стал поддерживать рекурсивный запрос с использованием CTE (Common Table Expressions). Это хорошая новость. Дело в том, что в проекте LibArea мы используем фасеты для построение всей навигации. И в виду того, что много работы с деревьями, легче по умолчанию поднять используемую версию MYSQL до 8.*
Переделав под 8+ кода будем меньше, будет быстрее и мы не будем огладываться назад, чтобы поддерживать то, то уже фактически устарело. Это позволит сыкономить достаточное количество времени.
public static function breadcrumb($facet_id)
{
$sql = "with recursive
n (facet_id, facet_slug, facet_title, lvl) as (
select facet_id, facet_slug, facet_title, 1 from facets where facet_id = :id
union all
select c.facet_id, c.facet_slug, c.facet_title, n.lvl + 1
from n
join facets_relation r on r.facet_chaid_id = n.facet_id
join facets c on c.facet_id = r.facet_parent_id
)
select facet_slug link, facet_title name from n where lvl <= 5";
return DB::run($sql, ['id' => $facet_id])->fetchAll();
}
Это один из запросов, чтобы сравнительно легко получить хлебные крошки, например.
А использование множественное назначение маршрутов, позволит сделать и путь URL вложенный:
Route::get('/example/...0-5/', 'От 0 до 5 произвольных частей.');
// или так
Route::get('/example/...1-3,7,9,11-20/', 'Количество частей в установленном диапазоне.');
См.: https://phphleb.ru/ru/v1/routes/
P.S. если мы смотрим вперед больше, то ИМХО, тут и думать не надо, выйгрышь далее будет очевиден. И с каждым днем он будет становиться все больше и больше. Но надо написать, что думаете по этому поводу? У вас 8+?
Доп.: на GitHub новая версия переведена…
Сегодня в большинстве случаях на серверах уже стоит MYSQL 8.+ Специально посмотрел у себя.