我目前正在努力研究如何在Zend中的Table对象上执行查询并获得Rowset作为回报。我特别需要的原因是因为我正在修改现有项目的代码而且我没有太大的灵活性。
查询:
SELECT *
FROM `tblname` ud
WHERE ud.user_id = some_id
AND
(
(ud.reputation_level > 1)
OR
(
(SELECT COUNT( * )
FROM `tblname` t
WHERE t.user_id = ud.user_id
AND t.category_id <=> ud.category_id
AND t.city_id <=> ud.city_id
) = 1
)
)
有没有办法使用Select object 来描述这个查询?
以前的SQL解决方案非常简单,由一个WHERE子句组成:
$where = $this->getAdapter()->quoteInto("user_id = ?",$user_id);
return $this->fetchAll($where);
我需要生成相同类型的结果(以便可以通过现有代码处理),但需要更复杂的查询。
我尝试过的事情
$db = Zend_Db_Table::getDefaultAdapter();
return $db->query($sql)->fetchAll();
---------------- OR ----------------------
return $this->fetchAll($select);
---------------- OR ----------------------
return $this->_db->query($sql)->fetchAll();
但是他们要么生成数组而不是对象,要么失败并加上基数违规消息。
我很感激有关如何在Zend中处理SQL文本查询的任何帮助。
答案 0 :(得分:1)
$dbAdapter = Zend_Db_Table::getDefaultAdapter();
//change the fetch mode becouse you don't like the array
$dbAdapter->setFetchMode(Zend_Db::FETCH_OBJ);
$sql = "you're long sql here";
$result = $dbAdapter->fetchAll($sql);
Zend_Debug::dump($result);
exit;
有关所有获取模式的列表,请转至Zend_Db_Adapter
要使用Zend_Db_Select而不是手动字符串来编写查询,请查看Zend_Db_Slect