我很担心为什么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();
稍微令人失望,我错过了什么?
答案 0 :(得分:10)
/**
* 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);