Ver Mensaje Individual
  #6 (permalink)  
Antiguo 13/04/2012, 14:58
chemajmb
 
Fecha de Ingreso: enero-2012
Ubicación: España
Mensajes: 150
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Doctrine 2 accediendo a campos de una relacion mediante lazy load

Hola, genial!! gracias!.

Código DQL:
Ver original
  1. SELECT c FROM Category c,
  2. JOIN c.parent p
  3. WHERE c.id > 1 AND c.activo = 1
  4. ORDER BY p.nombre DESC, c.visible DESC
Empece haciendolo asi pero hice distintas variaciones hasta llegar mas o menos a lo que viste, aunque ese metodo nisiquiera lo uso. Pero ok entendido, ahora que todo funciona bien y lo veo mas claro, retomo esta manera con JOIN. Gracias por la aclaracion.


Código PHP:
Ver original
  1. $where .= " AND p.id = :id";
  2. ...
  3. $query->setParameter('id', $id);

Ok, leere lo que me has dicho, pero ¿ podrias decirme algun pro principal o importante de usar el metodo setParameter o setParameters ? A simple vista no veo mucha diferencia.


A ver masterpuppet, lo de pasar los parametros del where en un parametro que es un array se puede hacer de mil maneras, se me pasan por la cabeza distintas maneras que se hacer y otras que no se hacer.

Me gustaria me dijeras tu como lo haces o me dieras las nociones basicas pues veo que controlas bastante y no quiero matarme la cabeza a hacerlo de una manera que puede ser bastante fea.

Aun asi te explico como tengo pensado hacerlo yo.
Como puedes observar yo paso un array con keys los atributos de la entidad y valores el valor para el filtrado/busqueda.
Esto podria funcionar si las consultas solo fueran filtradas por campos de la propia entidad, pero no es ese el caso.
Y es que se complica cuando quieres hacer un filtrado por un campo de una relacion. Pues la key ya no coincide con el nombre del campo de la relacion.
Es por eso que yo lo hago de la siguiente manera
Código PHP:
public function dameOrdenadoPor(array $whereparam = array() ){
    
$where '';
    if ( !empty(
$whereparam) && (!in_array(''$whereparam)) && (!in_array(null$whereparam)) ){
        foreach( 
$whereparam AS $akey => $avalue){
            if ( 
$akey == 'categoriapadre')
                
$where .= " AND p.id = :categoriapadre";
            else
                
$where .= " AND c.$akey LIKE :$akey";
        }
    }else
        throw new 
MiExcepcion('Error en paso de parametros');
    
$query $this->_em->createQuery"SELECT c FROM Entidad\Categoria c
                                        JOIN c.categoriapadre p
                                        WHERE c.id > 1 AND c.activo = true$where "
);
    
$query->setParameters$whereparam );
    return 
$query->getResult();

cuando la key es 'categoriapadre' que contiene la id de la categoria padre por la cual quiero filtrar, entonces tengo que escribir p.id = :categoriapadre
y para el resto ya la key coincide con el nombre del atributo con lo que
c.$akey LIKE :$akey

Pues eso, lo principal que quiero saber es una buena manera de pasar parametros y filtrarlos y hacer este tipo de metodos.

Última edición por chemajmb; 13/04/2012 a las 16:11