Как использовать andWhere и или Where в Доктрине?

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

Как я могу сделать это в Доктрине?

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

это не правильно … Должно быть:

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

но как я могу это сделать? В Propel есть функция getNewCriterion , а в Doctrine …?

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

Вот пример для тех, кто имеет более сложные условия и использует Doctrine 2. * с QueryBuilder :

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

Это выражения, упомянутые в отклике Czechnology.

Почему не просто

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

EDIT : вы также можете использовать класс Expr (Doctrine2).