2011-08-30 4 views
1

내 앱에 새 쿼리를 추가하려고하는데 조금 꼼짝도하지 않습니다. 나는 또한 검색 용어로 무엇을 사용해야할지 모르기 때문에 붙어있다.Doctrine_Query :: create()가 포함 된 symfony/doctrine 특수 쿼리 (MAX)

좋아, 그럼 지금 당장에하자 :

Table: a 
primary key: id 
string: name 

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

는 내가하고 싶은 지정된 객체 A의 최대 클러스터 INT를 검색 할 수 있습니다. 수행 할 때

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); 
    } 
} 

: SQL에서 :

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

내가 심포니 1.4 교리 1.2을 사용하고, 나는 바로 이름 maxCluster()와 클래스 A에 대한 방법을 추가하여 싶어 다음과 같은 오류 메시지가 나타납니다.

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

다른 수화 모드를 사용해보십시오 :'return $ q-> fetchOne (array(), Doctrine_Core :: HYDRATE_SINGLE_SCALAR)' –

+0

그 힌트를 주셔서 대단히 감사합니다. – Sgoettschkes

관련 문제