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.