querybuilder query left inner php sql doctrine

php - query - ¿Cómo usar andWhere and orWhere in Doctrine?



set parameters doctrine (3)

WHERE a = 1 AND (b = 1 Or b = 2) AND (c = 1 OR c = 2)

¿Cómo puedo hacer esto en Doctrine?

$q->where("a = 1"); $q->andWhere("b = 1") $q->orWhere("b = 2") $q->andWhere("c = 1") $q->orWhere("d = 2")

esto no es correcto ... Debería ser:

$q->where("a = 1"); $q->andWhere("b = 1") $q->orWhere("b = 2") $q->andWhere("c = 1") $q->orWhere("d = 2")

pero ¿cómo puedo hacerlo? En Propel es la función getNewCriterion , y en Doctrine ...?


¿Por qué no solo

$q->where("a = 1"); $q->andWhere("b = 1 OR b = 2"); $q->andWhere("c = 1 OR d = 2");

EDITAR : También puede usar la clase Expr (Doctrine2).


$q->where("a = 1") ->andWhere("b = 1 OR b = 2") ->andWhere("c = 2 OR c = 2") ;


Aquí hay un ejemplo para aquellos que tienen condiciones más complicadas y que usan Doctrine 2. * con QueryBuilder :

$qb->where(''o.foo = 1'') ->andWhere($qb->expr()->orX( $qb->expr()->eq(''o.bar'', 1), $qb->expr()->eq(''o.bar'', 2) )) ;

Esas son expresiones mencionadas en la respuesta de Czechnology.