Breadcrumbs são simples na superfície, mas escondem um problema interessante de estrutura de dados: como navegar eficientemente de um nó folha até a raiz em uma árvore armazenada em banco relacional?
O Modelo de Dados
A tabela de páginas tem uma coluna parent_id que referencia a própria tabela — a estrutura clássica de adjacency list. Simples de inserir, mas exige cuidado na leitura.
A Função Recursiva
function buildPageAncestors(int $pageId, array &$ancestors = []): array {
$page = $this->db->findPage($pageId);
if (!$page) return $ancestors;
array_unshift($ancestors, $page);
if ($page['parent_id']) {
return $this->buildPageAncestors($page['parent_id'], $ancestors);
}
return $ancestors;
}
A chave é o array_unshift — ele adiciona ao início do array, então quando a recursão termina o array já está na ordem correta: raiz → filho → neto → página atual.
Seja o primeiro a comentar.