2011-10-10 17 views
5

Mi consulta es doctirne 2. tengo un campo de estado en usuarios, privado o público. quiero ser capaz de ejecutar esta consulta y mostrar todos los comentarios donde el estatus = pública y privada sólo si identificador de usuario = corriente conectado identificación del usuario (que sé, $ loggerUserVarID)doctrine 2 - query conditional builder questions ... If statements?

$q = $this->em->createQueryBuilder() 
      ->select('c') 
      ->from('\Entities\Comments', 'c') 
      ->leftJoin('c.users', 'u') 
      ->where('status = public') ??? display all public comments but private if it belpongs to the logged in user.? 
      ->setParameter(1, $loggerUserVarID) 
      ->getQuery(); 

en este momento , estoy usando una declaración if luego de obtener los resultados, ¿hay alguna forma de hacer una instrucción if dentro de esta consulta?

+0

Cuál es irritante: un comentario tiene una propiedad de los usuarios - significa que varios usuarios se asignan a un comentario? ¿Cómo va eso a funcionar? ¿No puedes comentar si solo tienes un propietario (usuario)? – Max

Respuesta

8

Por lo tanto, desea devolver Comentarios "Si el estado es 'public' o el ownerId es $ loggedUserVarID", ¿verdad?

Tenga en cuenta que si $ loggedUserVarID coincide con el propietario, realmente no le importa el estado.

Consulte el generador de consultas y los documentos dql. Explican muy claramente cómo juntar complejos donde las condiciones.

Lo que probablemente quiere decir algo así como:

$q = $this->em->createQueryBuilder() 
      ->select('c') 
      ->from('\Entities\Comments', 'c') 
      ->join('c.users', 'u') 
      ->where(
       $qb->expr()->orX(
        $qb->expr()->eq('status','public'), 
        $qb->expr()->eq('u.id',$loggedInUser) 
       ) 
      ) 
     ->setParameter(1, $loggerUserVarID) 
     ->getQuery();