我正在尝试向我的应用添加新查询,而且我有点卡住了。我也不知道用什么作为搜索词,所以我卡住了。
好的,我们马上进入吧:
Table: a
primary key: id
string: name
Table: b
primary key: id
foreign key: a_id
int: cluster
我想要做的是检索给定对象的max cluster int。在SQL中:
SELECT MAX(b.cluster) FROM b WHERE b.a_id = ? GROUP BY b.cluster;
当我使用symfony 1.4和doctrine 1.2时,我希望通过向名为maxCluster()的类a添加方法来实现它:
class A extends BaseA{
..
public function maxCluster(){
$q = Doctrine_Query::create()->select('MAX(b.cluster)')->from('B b')->where('b.a_id = ?', $this->getId())->groupBy('b.cluster');
return Doctrine_Core::getTable('A')->execute($q);
}
}
执行此操作时,我收到以下错误消息:
A query with the name A/SELECT MAX(b.cluster) FROM B b WHERE b.a_id = ? GROUP BY b.cluster does not exist.
我认为解决方案应该不那么复杂,我现在就被卡住了。
感谢您的帮助, 塞巴斯蒂安
编辑:我有一个提示,所以知道maxCluster-function的代码如下:$q = Doctrine_Query::create()->select('MAX(b.cluster) AS maxCluster')->from('B b')->where('b.a_id = ?', $this->getId())->;
$result = $q->fetchOne();
return $result->maxCluster;
现在我的问题是:这是最好的方法吗?我很困惑,fetchOne返回一个图片数组。我不希望这样的行为,因为我选择一个int而不是对象。也许任何人都可以指出这类查询的最佳实践是什么。
答案 0 :(得分:1)
相对于getTable的执行方法用于执行命名查询,如果要使用它们,请查看doctrine manual以查找更多信息。
或者您可以使用return $q->execute()
返回查询结果。