Foros del Web » Programando para Internet » PHP » Zend »

[SOLUCIONADO] buscar de un hijo al padre con recursividad

Estas en el tema de buscar de un hijo al padre con recursividad en el foro de Zend en Foros del Web. Hola: Tengo esta recursividad: Código PHP:      public function  recursiveGenerateCite ( $cite ) {                  $sql  =  'SELECT d.sigla,d.departamento_id parent FROM departamento d WHERE d.id =' . $cite [ 'parent' ];          $stmt  =  $this ...
  #1 (permalink)  
Antiguo 11/06/2013, 13:14
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 3 meses
Puntos: 12
buscar de un hijo al padre con recursividad

Hola:

Tengo esta recursividad:
Código PHP:
    public function recursiveGenerateCite($cite) {        
        
$sql 'SELECT d.sigla,d.departamento_id parent FROM departamento d WHERE d.id ='.$cite['parent'];
        
$stmt $this->em->getConnection()->prepare($sql);
        
$stmt->execute();
        
$repo $stmt->fetchAll();
        
$this->em->clear();
        
$cite['cite'] = $repo[0]['sigla'].'-'.$cite['sigla'];
        
$cite['parent'] = $repo[0]['parent'];
        
$this->recursiveGenerateCite($cite); 
lo que hace es obtener el padre de un determinado hijo, uso sql nativo, puesto que con este dql no me funciona:

$query = $this->em->createQuery('SELECT d.sigla, o.parent
FROM Application\Entity\Departamento d JOIN d.parent o WHERE d.id = '.$cite['parent']);

el problema esta en que si no uso recursividad el sql nativo funciona bien, pero cuando uso recursividad me muestra este mensaje:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server.

si pudieran explicarme por que, estaré muy agradecido
  #2 (permalink)  
Antiguo 11/06/2013, 15:23
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 3 meses
Puntos: 12
Respuesta: buscar de un hijo al padre con recursividad

No era un problema de Zend o de mysql, era un problema mio, no es lo mismo recursividad de padre a hijo que de hijo a padre, asi solucione mi problema:

Código PHP:
    public function recursiveGenerateCite($cite) {
        
$this->cite $cite;        
        
$sql 'SELECT d.id,d.sigla,d.departamento_id parent FROM departamento d WHERE d.id ='.$this->cite['parent'];
        
$stmt $this->em->getConnection()->prepare($sql);
        
$stmt->execute();
        
$repo $stmt->fetchAll();
        
$this->cite['cite'] = $repo[0]['sigla'].'-'.$this->cite['cite'];
        
$this->cite['parent'] = $repo[0]['parent'];
        echo 
$this->cite['cite'].'<br>';
        if(
$repo[0]['id'] > 1)
            
$this->recursiveGenerateCite($this->cite);
        return 
$this->cite;

se que "1" es el id inicial o el unico padre, es decir es un registro que no tendrá otro padre.
  #3 (permalink)  
Antiguo 11/06/2013, 16:12
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: buscar de un hijo al padre con recursividad

Si estas utilizando doctrine talves te interese la extensión Tree

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #4 (permalink)  
Antiguo 12/06/2013, 09:44
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 3 meses
Puntos: 12
Respuesta: buscar de un hijo al padre con recursividad

En todos los ejemplos de gedmo Tree, existen de padre a hijo pero no de hijo a padre, pero si voy trabajando con dicha extension.

Gracias
  #5 (permalink)  
Antiguo 12/06/2013, 10:57
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: buscar de un hijo al padre con recursividad

En ese caso que es lo que quieres obtener exactamente ?, porque tienes métodos para obtener el path a determinado nodo.
__________________
http://es.phptherightway.com/
thats us riders :)
  #6 (permalink)  
Antiguo 12/06/2013, 11:29
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 3 meses
Puntos: 12
Respuesta: buscar de un hijo al padre con recursividad

exactamente eso queria, obtener el nodo principal, o el ultimo padre, cual seria ese método?
  #7 (permalink)  
Antiguo 12/06/2013, 11:52
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: buscar de un hijo al padre con recursividad

Formas hay varias, pero si vas a hacer recursividad a la bbdd es lo mismo que hacerlo a nivel del modelo pero sin preocuparte por queries, no te sirve iterar sobre el getParent ?

Código PHP:
Ver original
  1. $parent = $node->getParent();
  2. while(null !== $parent) {
  3.    $parent = $node->getParent();
  4. }

Otra opción seria agregar un getter para la propiedad root, lo que no estoy seguro si esto último te retorna directamente el nodo o solamente el id pero si es este último caso ya tienes el id para hacer la query directamente sin recursividad.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #8 (permalink)  
Antiguo 12/06/2013, 12:40
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 3 meses
Puntos: 12
Respuesta: buscar de un hijo al padre con recursividad

Muy agradecido estoy por la colaboracion brindada en este medio, la verdad me han ayudado mucho. Gracias

Etiquetas: hijo, padre, recursividad
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:03.