Cita:
Iniciado por vgonga1986 Una autorelación, clave foranea referenciando a clave primaria de la misma tabla. Coincido con @Eleazan que sería lo suyo para este caso.
Un saludo y suerte.
De echo mi tabla es así como dicen, con una relación recursiva, pero no puedo ponerle 0 a las categorías padres porque las asociaciones no me lo permiten.
La categoria 0 no existe.
-------------------------------
categoria
-------------------------------
id
categoria_id
nombre
descripcion
-------------------------------
Ahora el codigo final es este.
Código PHP:
Ver original/**
* Obtiene un arreglo con las categorias y su respectivo path.
*
* Ej. categoria_1 > subcategoria_1 > subcategoria_1.1
*
* @param id $parent Id de la categoria padre.
* @param string $nombre Nombre del path para la categoria hija.
* @param string $blank Texto a mostrar en el primer option, si es nulo no genera el indice
* @return array
*/
public function treeCategory($parent = NULL, $nombre = NULL, $blank = NULL)
{
$conditions = Validate::isNull($parent) ? 'categoria_id IS NULL' : "categoria_id = $parent";
$rs = $this->find("conditions: $conditions");
if(!$rs) return;
if(!Validate::isNull($blank)) $path[''] = $blank;
foreach($rs as $item)
{
$path[$item->id] = Validate::isNull($nombre) ? $item->nombre : "$nombre > $item->nombre";
$childs = $this->treeCategory($item->id, $path[$item->id]);
if(count($childs) > 0) foreach($childs as $k => $v) $path[$k] = $v;
}
return $path;
}
Comparto tu opinion Uncontroled_Duck
una categoría y una subcategoría al fin son categorías
Saludos!