Zend DB fetchAll():作为数组的位置

时间:2012-02-07 00:56:56

标签: zend-framework zend-db-table

我很担心为什么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 个答案:

答案 0 :(得分: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()确实接受了where子句的数组。

您的数组应如下所示(基于Zend_Db_Select

中的定义
$where = array(
    'id > 0',
    'enabled = ?' => 1
);

答案 1 :(得分:0)

首先,我们将查看您的原始代码:

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

请记住 =>是一个赋值运算符。在上面的数组中,您首先会自动将字符串分配给键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);