Итак, я пытаюсь добиться чего-то вроде этого:
SELECT * FROM table WHERE status_id IN (1,3,4);
используя Zend_Db_Select ... не могу найти, как это сделать :( Это вообще возможно?
Итак, я пытаюсь добиться чего-то вроде этого:
SELECT * FROM table WHERE status_id IN (1,3,4);
используя Zend_Db_Select ... не могу найти, как это сделать :( Это вообще возможно?
вы также можете использовать это так:
$data = array(1,3,4);
$select->where('status_id IN(?)', $data);
Вам не нужно взрывать массив, и это безопаснее
Первый ответ, вероятно, работает в ZF1, но не работает в Zend Framework 2:
$data = array(1,3,4);
$select->where('status_id IN(?)', $data);
В случае с Zend Framework2 я обнаружил, что вам нужно использовать:
$data = array(1,3,4);
$select->where(array('status_id' => $data));
Результат:
WHERE `status_id` IN ('1', '3', '4')
Я нигде не мог найти это задокументировано! Документация ZF обычно не оптимальна.
видимо это супер просто ... тупой я:
$select->where('status_id IN(1,3,4)');
:(
Мы можем использовать Zend\Db\Sql\Predicate\In
с Zend\Db\Sql\Where
, чтобы сделать запрос где в внутри модели.
$this->status_ids = array(1,3,4);
// select attributes from db by where in
$result = $this->select(function (Select $select) {
$predicate = new In();
$select->where(
$predicate->setValueSet($this->status_ids)
->setIdentifier('status_id')
);
})->toArray();