Zend DB fetchAll (): где как массив - PullRequest
       9

Zend DB fetchAll (): где как массив

1 голос
/ 07 февраля 2012

Я не понимаю, почему Zend_DB не принимает массив предложений WHERE - или я ошибаюсь?Я сделал следующую работу вокруг:

$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();

Слегка разочаровывает, я что-то упустил?

Ответы [ 2 ]

10 голосов
/ 07 февраля 2012

С 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() принимает массив предложений where.

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

$where = array(
    'id > 0',
    'enabled = ?' => 1
);
0 голосов
/ 28 января 2013

Сначала мы рассмотрим ваш оригинальный код:

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

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

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

$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);
...