Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

PHP OO Duda Consulta Doctrine

Estas en el tema de Duda Consulta Doctrine en el foro de Frameworks y PHP orientado a objetos en Foros del Web. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original /**      * @Id      * @Column(type="integer")      * @GeneratedValue      */     protected ...
  #1 (permalink)  
Antiguo 16/07/2013, 11:02
Avatar de miguec04  
Fecha de Ingreso: agosto-2008
Ubicación: Cimitarra, Santander
Mensajes: 378
Antigüedad: 15 años, 8 meses
Puntos: 15
Duda Consulta Doctrine

Código PHP:
Ver original
  1. /**
  2.      * @Id
  3.      * @Column(type="integer")
  4.      * @GeneratedValue
  5.      */
  6.     protected $id_area;
  7.    
  8.     /**
  9.      * @Column(type="string")
  10.      */
  11.     protected $nombre;
  12.    
  13.     /**
  14.      * @Column(type="string")
  15.      */
  16.     protected $url_imagen;
  17.    
  18.     /**
  19.      * @ManyToMany(targetEntity="Asignaturas", mappedBy="lista_asignaturas")
  20.      */
  21.     private $padres;
  22.        
  23.     /**
  24.      * @ManyToMany(targetEntity="Asignaturas", inversedBy="padres")
  25.      * @JoinTable(name="areas",
  26.      *      joinColumns={@JoinColumn(name="id_area", referencedColumnName="id_area")},
  27.      *      inverseJoinColumns={@JoinColumn(name="id_area", referencedColumnName="id_area")}
  28.      *      )
  29.      */
  30.     private $lista_asignaturas;

Tengo una pregunta, es que Areas es la tabla padre y tiene un listado de asignaturas, debido a que una asignatura pertenece a un area.

bueno mi pregunta es, siento que doctrine consume mucho recursos al hacer este tipo de consulta porque si yo consulta una sola area me trae el listado completo de asignaturas, lo que quisiera saber es si de alguna forma se le puede decir, en esta consulta si traigame las asignaturas completas, pero en esta otra consulta no lo haga.

pongo el ejemplo de como estoy haciendo la consulta, muchas gracias.

Código PHP:
Ver original
  1. $lista              = array();
  2.         $query              = $this->conexion->createQueryBuilder();
  3.         $query->select('a');
  4.         $query->from('models\persistentes\Areas','a');
  5.         $query->where("1=1");
  6.        
  7.         if(!$this->validaciones->getVacio($idAreaB)) {
  8.             $query->andWhere("a.id_area = :id_area");
  9.             $query->setParameter('id_area',$idAreaB);
  10.         }
  11.        
  12.         $query              = $query->getQuery();
  13.         $areas              = $query->execute();
  14.        
  15.         foreach($areas as $area) {
  16.             $temporal       = $this->objetos->getPersistenteADto($area);
  17.             $lista[]        = $temporal;
  18.         }
  19.         return $lista;
__________________
Desoftc Technology - Miguel Carmona
Creaciones Inteligentes - Cimitarra Colombia
[email protected]
http://www.desoftc.com.co
  #2 (permalink)  
Antiguo 16/07/2013, 11:26
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: Duda Consulta Doctrine

Por defecto doctrine utiliza LAZY para las asociaciones, osea hace el fetch la primera vez que intentas acceder. a no ser que el fetch sea EAGER, que te hace pensar que trae el grafo completo ?
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 16/07/2013, 13:47
Avatar de miguec04  
Fecha de Ingreso: agosto-2008
Ubicación: Cimitarra, Santander
Mensajes: 378
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Duda Consulta Doctrine

Amigo gracias si es lo que necesito pero no me funciono, e ingreso nuevamente los atributos porque me di cuenta de un error, agradezco un poco mas de claridad, es que soy nuevo en doctrine, me gusta mucho por su parecido a hibbernate de java por eso lo empece a usar.

Código PHP:
Ver original
  1. /**
  2.  *
  3.  * @Entity
  4.  * @Table(name="areas")
  5.  */
  6. class Areas implements PersistenteGenerico {
  7.    
  8.     /**
  9.      * @Id
  10.      * @Column(type="integer")
  11.      * @GeneratedValue
  12.      */
  13.     protected $id_area;
  14.    
  15.     /**
  16.      * @Column(type="string")
  17.      */
  18.     protected $nombre;
  19.    
  20.     /**
  21.      * @Column(type="string")
  22.      */
  23.     protected $url_imagen;
  24.    
  25.     /**
  26.      * @OneToMany(targetEntity="Asignaturas", mappedBy="area", fetch="EAGER")
  27.      **/
  28.     private $lista_asignaturas;
  29.    
  30.     public function __construct() {
  31.         $this->lista_asignaturas    = new \Doctrine\Common\Collections\ArrayCollection();
  32.     }

Código PHP:
Ver original
  1. /**
  2.  * @Entity
  3.  * @Table(name="asignaturas")
  4.  */
  5. class Asignaturas implements PersistenteGenerico {
  6.  
  7.     /**
  8.      * @Id
  9.      * @Column(type="integer")
  10.      * @GeneratedValue
  11.      */
  12.     protected $id_asignatura;
  13.    
  14.     /**
  15.      * @Column(type="string")
  16.      */
  17.     protected $nombre;
  18.    
  19.     /**
  20.      * @Column(type="string")
  21.      */
  22.     protected $url_imagen;
  23.  
  24.     /**
  25.      * @Column(type="integer")
  26.      */
  27.     protected $id_area;
  28.    
  29.     /**
  30.      *
  31.      * @ManyToOne(targetEntity="Areas",inversedBy="lista_asignaturas", fetch="LAZY")
  32.      * @JoinColumn(name="id_area",referencedColumnName="id_area")
  33.      */
  34.     protected $area;
__________________
Desoftc Technology - Miguel Carmona
Creaciones Inteligentes - Cimitarra Colombia
[email protected]
http://www.desoftc.com.co
  #4 (permalink)  
Antiguo 16/07/2013, 13:55
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: Duda Consulta Doctrine

Es lo que te comente anteriormente, con fetch=EAGER le estas diciendo a doctrine que cargue siempre las asignaturas, si no quieres que lo haga simplemente eliminalo de mapeo o bien utiliza EXTRA_LAZY

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #5 (permalink)  
Antiguo 26/08/2013, 09:42
Avatar de miguec04  
Fecha de Ingreso: agosto-2008
Ubicación: Cimitarra, Santander
Mensajes: 378
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Duda Consulta Doctrine

Hola compañero una nueva pregunta, es que tengo el siguiente objeto llamado Grupos y este tiene unas relaciones "onetoone" mi problema radica al hacer una consulta donde quiero obtener el objeto de forma directa me explico:

este es el objeto
Código PHP:
Ver original
  1. namespace models\persistentes;
  2.  
  3. /**
  4.  *@Entity
  5.  *@Table(name="grupos")
  6.  */
  7. class Grupos extends Persistente implements PersistenteGenerico{
  8.    
  9.     /**
  10.      * @Id
  11.      * @Column(type="integer");
  12.      * @GeneratedValue
  13.      */
  14.     protected $id_grupo;
  15.    
  16.     /**
  17.      * @Column(type="string")
  18.      */
  19.     protected $nombre;
  20.    
  21.     /**
  22.      * @Column(type="integer")
  23.      */
  24.     protected $id_usuario_director;
  25.    
  26.     /**
  27.      * @Column(type="integer")
  28.      */
  29.     protected $id_usuario_codirector;
  30.    
  31.     /**
  32.      * @Column(type="integer")
  33.      */
  34.     protected $id_grado;
  35.  
  36.     /**
  37.      * @Column(type="smallint")
  38.      */
  39.     protected $tipo_grupo;
  40.    
  41.     /**
  42.      * @Column(type="integer")
  43.      */
  44.     protected $id_sede;
  45.    
  46.     /**
  47.      * @Column(type="smallint")
  48.      */
  49.     protected $jornada;
  50.    
  51.     /**
  52.      * @Column(type="integer")
  53.      */
  54.     protected $id_anualidad;
  55.    
  56.     /**
  57.      *
  58.      * @ManyToOne(targetEntity="Grados",inversedBy="lista_grupos")
  59.      * @JoinColumn(name="id_grado",referencedColumnName="id_grado")
  60.      * @var objeto_grado
  61.      */
  62.     protected $objeto_grado;
  63.    
  64.     /**
  65.      * @OneToOne(targetEntity="Anualidad_lectiva")
  66.      * @JoinColumn(name="id_anualidad", referencedColumnName="id_anualidad")
  67.      * @var objeto_anualidad
  68.      */
  69.     protected $objeto_anualidad;
  70.    
  71.     /**
  72.      * @OneToOne(targetEntity="Sedes")
  73.      * @JoinColumn(name="id_sede", referencedColumnName="id_sede")
  74.      */
  75.     protected $objeto_sede;
  76.    
  77.     /**
  78.      * @OneToOne(targetEntity="Usuarios")
  79.      * @JoinColumn(name="id_usuario_director", referencedColumnName="id_usuario")
  80.      */
  81.     protected $objeto_usuario_director;
  82.    
  83.     /**
  84.      * @OneToOne(targetEntity="Usuarios")
  85.      * @JoinColumn(name="id_usuario_codirector", referencedColumnName="id_usuario")
  86.      */
  87.     protected $objeto_usuario_codirector;

y esta es la consulta que hago:

Código PHP:
Ver original
  1. //donde $per es la clase que voy a consultar y $val->_keys() es un array donde esta la llave primaria
  2. //con su valor respectivo
  3. $persistente                    = $this->CI->doctrine->conexion->find($per,$val->_keys());

mi problema es que yo quiero tomar solo los valores de los campos, no sus referencias de los objetos. y parece que doctrine me obliga, ni siquiera tiene listas, le agradezco su colaboración.

Gracias!
__________________
Desoftc Technology - Miguel Carmona
Creaciones Inteligentes - Cimitarra Colombia
[email protected]
http://www.desoftc.com.co

Etiquetas: doctrine, php, select, tabla
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 05:51.