Я хочу сгенерировать это сложное предложение WHERE в Zend_Db:
SELECT *
FROM 'products'
WHERE
status = 'active'
AND
(
attribute = 'one'
OR
attribute = 'two'
OR
[...]
)
;
Я пробовал это:
$select->from('product');
$select->where('status = ?', $status);
$select->where('attribute = ?', $a1);
$select->orWhere('attribute = ?', $a2);
и это произвело:
SELECT `product`.*
FROM `product`
WHERE
(status = 'active')
AND
(attribute = 'one')
OR
(attribute = 'two')
;
Я выяснил один способ выполнения этой работы, но я чувствовал, что это своего рода "обман", используя PHP, чтобы сначала объединить предложения "ИЛИ", а затем объединить их, используя предложение Zend_Db where(). 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);
Это создало то, что я искал. Но мне любопытно, есть ли "официальный" способ получить этот сложный оператор WHERE (который действительно не слишком сложный, просто добавляя некоторые скобки) с использованием инструмента Zend_Db, вместо того, чтобы сначала комбинировать его в PHP.
Ура!