2011-08-30 71 views
1

我想添加一个新的查询到我的应用程序,我卡住了一下。我也不知道如何使用搜索词,所以我被卡住了。symfony/doctrine特殊查询(MAX)与Doctrine_Query ::创建()

好吧,让我们来看看它现在:

Table: a 
primary key: id 
string: name 

Table: b 
primary key: id 
foreign key: a_id 
int: cluster 

我想要做的是检索给定对象的最大集群INT。在SQL:

SELECT MAX(b.cluster) FROM b WHERE b.a_id = ? GROUP BY b.cluster; 

由于我使用的symfony 1.4和学说1.2,我想正确的加入到一个类的方法的名称maxCluster()得到它:

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功能的代码如下所示:

$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而不是对象。也许任何人都可以指出这种查询的最佳实践。

回答

1

相对于getTable的执行方法用于执行命名查询,查看doctrine manual以查找更多如果要使用它们。您可以使用return $q->execute()返回查询结果。

+0

谢谢你的回答。请参阅我上面的编辑:它现在正在工作,但我不满意它。 – Sgoettschkes

+2

尝试使用不同的水合模式:'返回$ q-> fetchOne(array(),Doctrine_Core :: HYDRATE_SINGLE_SCALAR)' –

+0

非常感谢您的提示,我会尽力的! – Sgoettschkes