2011-08-30 43 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