2012-02-07 3 views
1

Я в замешательстве, почему Zend_DB не принимает массив из WHERE статей - или я неверен? Я сделал следующее работу вокруг:Zend DB fetchAll(): where as array

$all = new ORM_Model_DbTable_Asset(); 
$wheres = array('id > 0', 'enabled' => 1); 
$all = $all->fetchAll(implode(' AND ', $wheres))->toArray(); 

за то, что я надеялся, что будет:

$all = new ORM_Model_DbTable_Asset(); 
$wheres = array('id > 0', 'enabled' => 1); 
$all = $all->fetchAll($wheres)->toArray(); 

Немного разочаровывает, я что-то отсутствует?

+1

Я бы избежать перезаписи '$ all' DB объект таблицы с массивом результатов – Phil

ответ

10

Zend_Db_Table_Abstract От

/** 
* Fetches all rows. 
* 
* Honors the Zend_Db_Adapter fetch mode. 
* 
* @param string|array|Zend_Db_Table_Select $where OPTIONAL An SQL WHERE clause or Zend_Db_Table_Select object. 
* @param string|array      $order OPTIONAL An SQL ORDER clause. 
* @param int        $count OPTIONAL An SQL LIMIT count. 
* @param int        $offset OPTIONAL An SQL LIMIT offset. 
* @return Zend_Db_Table_Rowset_Abstract The row results per the Zend_Db_Adapter fetch mode. 
*/ 
public function fetchAll($where = null, $order = null, $count = null, $offset = null) 

Таким образом, вы неправильны, fetchAll() делает принимает массив где статей.

Ваш массив должен выглядеть следующим образом (на основании определения в Zend_Db_Select)

$where = array(
    'id > 0', 
    'enabled = ?' => 1 
); 
+0

для того, чтобы использовать эти обозначения не $, где бы быть выбор() объекта ? $ where = $ this-> select(); $ where-> где (array ('id> 0', 'enabled =?', 1)); или что-то подобное? – RockyFord

+1

@RockyFord Это то, что происходит внутри, когда аргумент '$ where' (first)' fetchAll() 'является массивом – Phil

0

Сначала мы будем смотреть на ваш исходный код:

$wheres = array('id > 0', 'enabled' => 1); 

Remember что => является оператор присваивания , В вашем массиве выше вы начинаете со строки, автоматически назначенной на ключ 0. Следующий элемент - это номер 1, присвоенный ключу 'enabled'. Решение, предложенное в ответе 1, присваивает номер 1 ключу 'enabled = ?'.

Попробуйте это:

$all = new ORM_Model_DbTable_Asset(); 
$where = array(); 
$where[] = 'id > 0'; 
$where[] = $all->quote_into('enabled >= ?', 1, 'INTEGER'); // 1 could be a variable 
$result = $all->fetchAll($where);