Я хочу создать это сложное предложение 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.
Ура!