只需编写如下查询:
$q = Doctrine_Query::create()
->select('r.title, r.title_safe, r.description')
->from('Regions r')
->where('pr.page_id = ?', 1)
->leftJoin('r.Page_regions pr');
$results = $q->execute(array(), Doctrine::HYDRATE_ARRAY);
但我想将$ results作为对象。我能怎么做?
答案 0 :(得分:1)
只使用不带参数的execute方法。
$ Q->执行();
答案 1 :(得分:0)
$q = Doctrine_Query::create()
->select('r.title, r.title_safe, r.description')
->from('Regions r')
->where('pr.page_id = ?', 1)
->leftJoin('r.Page_regions pr');
$q = $q->getQuery()->getResult();
答案 2 :(得分:0)
您正在使用HYDRATE_ARRAY
标志,该标志将所有结果作为数组返回。您可以省略此标志以将结果作为对象返回。
因为Doctrine_Query::execute()
返回一个Doctrine_Collection对象,所以可以调用许多方法来获得所需的结果(参见Doctrine_Collection API Documentation)。如果您只想要一个结果,请尝试以下方法:
$q = Doctrine_Query::create()
->select('r.title, r.title_safe, r.description')
->from('Regions r')
->where('pr.page_id = ?', 1)
->leftJoin('r.Page_regions pr');
/* @var Doctrine_Record */
$results = $q->execute()->getFirst();
答案 3 :(得分:0)
我认为有办法获得PDOStatement
表示。让我回答你。
在此期间,这是一个快速解决方案。但这只适用于来自实际模型的数据(关系数据将是对象的数组)。
$objs = array();
foreach ($q->fetchArray() as $arr) {
$objs = (object)$arr;
}
- 编辑 -
无法找到它。但你可以扩展Doctrine_Query
类。
class App_Doctrine_Query extends Doctrine_Query
{
public function fetchObjects(array $params = array())
{
return array_map(array($this, 'convertArrayToObject'), $this->fetchArray($params));
}
private function convertArrayToObject(array $arr)
{
$obj = new stdClass();
foreach ($arr as $key => $val) {
if (is_array($val)) {
$val = $this->convertArrayToObject($val);
}
$obj->$key = $val;
}
return $obj;
}
}
在你的引导程序中,你会添加如下内容:
$manager = Doctrine_Manager::getInstance();
$manager->setAttribute(Doctrine_Core::ATTR_QUERY_CLASS, 'App_Doctrine_Query');