Quiero generar este complejo cláusula WHERE en Zend_Db:Complejo cláusula WHERE con Zend_Db utilizando múltiples y operadores OR
SELECT *
FROM 'products'
WHERE
status = 'active'
AND
(
attribute = 'one'
OR
attribute = 'two'
OR
[...]
)
;
He intentado esto:
$select->from('product');
$select->where('status = ?', $status);
$select->where('attribute = ?', $a1);
$select->orWhere('attribute = ?', $a2);
y que produje:
SELECT `product`.*
FROM `product`
WHERE
(status = 'active')
AND
(attribute = 'one')
OR
(attribute = 'two')
;
Descubrí un método para hacer este trabajo pero sentí que era una especie de "trampa" al usar PHP para combinar el "OR" primero las cláusulas y luego combinarlas usando Zend_Db where() cláusula. Código PHP:
$WHERE = array();
foreach($attributes as $a):
#WHERE[] = "attribute = '" . $a . "'";
endforeach;
$WHERE = implode(' OR ', $WHERE);
$select->from('product');
$select->where('status = ?', $status);
$select->where($WHERE);
Eso produjo lo que estaba buscando. Pero tengo curiosidad si hay una forma "oficial" de obtener esa declaración WHERE compleja (que en realidad no es demasiado compleja, solo agrega algunos paréntesis) con el uso de la herramienta Zend_Db, en lugar de combinarla en PHP primero.
¡Salud!
Sí, su solución, de la guía de referencia de ZF, es básicamente cómo se me ocurrió el último ejemplo. Tal vez esa es la forma correcta de hacerlo en ese momento. Simplemente se siente contrario a la intuición dado que Zend_Db_Select (ZDS) se supone que debe generar su SQL para usted, pero tenemos que generar una parte de él fuera de ZDS. Tal vez, esto es algo que podría usar una extensión para que podamos mantener todo el código en Zend_Db_Select. – jmbertucci
El enlace [Zend_Db_Select] (http://framework.zend.com/manual/1.12/en/zend.db.select.html) no funcionó para mí aquí hay un enlace actualizado a los documentos. –