Estoy usando PHP Doctrine ORM para crear mis consultas. Sin embargo, no puedo parecer bastante para averiguar cómo escribir la siguiente cláusula WHERE usando DQL (Lenguaje de Consulta Doctrina):Cláusulas WHERE complejas que usan la Doctrina PHP ORM
WHERE name='ABC' AND (category1 = 'X' OR category2 = 'X' OR category3 = 'X')
AND price > 10
¿Cómo puedo especificar dónde van los paréntesis?
Lo que tengo actualmente en mi código PHP es la siguiente:
->where('name = ?', 'ABC')
->andWhere('category1 = ?', 'X')
->orWhere('category2 = ?', 'X')
->orWhere('category3 = ?', 'X')
->andWhere('price > ?', 10)
Pero esto produce algo así como
WHERE name='ABC' AND category1 = 'X' OR category2 = 'X' OR category3 = 'X'
AND price > 10
que, por orden de las operaciones, no devuelve los resultados esperados.
Además, ¿hay alguna diferencia entre los métodos "where", "andWhere" y "addWhere"?
ACTUALIZACIÓN Ok, parece que no se puede hacer consultas complejas utilizando DQL, por lo que he estado tratando de escribir el código SQL de forma manual y utilizar el método andWhere() para añadirla. Sin embargo, estoy usando WHERE..IN y Doctrina parece estar excluyendo mis paréntesis que encierran:
$q->andWhere("(category1 IN $subcategory_in_clause
OR category2 IN $subcategory_in_clause
OR category3 IN $subcategory_in_clause)");
Otra solución se puede encontrar aquí http://stackoverflow.com/a/7720723/251735 – Jekis