2013-10-16 1 views
1

propel 1.6.7에서 데이터 검색에 어려움을 겪고 있습니다.다중 조인을 사용하는 쿼리에서 집계 된 열을 단일 테이블로 가져 오기

가 여기에 내가 달성하고자하는 쿼리의 예제이다 : 나는 문제가 있어요,

select count(1) as amount, p1.local_id FROM panel_data pd 
     JOIN panel_data_has_code pp1 on (pd.panel_data_id = pp1.panel_data_id) 
     JOIN panel_code p1 on (pp1.panel_code_id = p1.panel_code_id AND p1.type='equipment' AND model_id = 'my_model_id') 
     JOIN panel_data_has_code pp2 on (pd.panel_data_id = pp2.panel_data_id) 
     JOIN panel_code p2 on (pp2.panel_code_id = p2.panel_code_id AND p2.type='model' AND p2.local_id='my_local_id') 
     GROUP BY p1.local_id 

을 내가 추진 ORM에서 적절한 기준을 구축하려고하지만 때마다 - 분명히 테이블 이름에 별칭을 가입 항상 추진 번역, 추가 조인 조건을 사용하거나 별칭을 select 메서드에서 사용하려고 할 때마다. 나는 복수의 조인 조건을 간단한 filterBy 방법으로 바꿨다 (나는 항상 내부 조인을 사용하므로 효과는 동일 할 것이다). 그러나 여전히 groupped 열 (p1.local_id)을 가져 오는 문제가있다.

는 여기에 내가 기압 작업 코드입니다 :

Unable to execute SELECT statement [SELECT count(1) AS amount, panel_code.LOCAL_ID AS \"p1.localId\" FROM panel_data INNER JOIN panel_data_has_code pp1 ON (panel_data.PANEL_DATA_ID=pp1.PANEL_DATA_ID) INNER JOIN panel_code p1 ON (pp1.PANEL_CODE_ID=p1.PANEL_CODE_ID) INNER JOIN panel_data_has_code pp2 ON (panel_data.PANEL_DATA_ID=pp2.PANEL_DATA_ID) INNER JOIN panel_code p2 ON (pp2.PANEL_CODE_ID=p2.PANEL_CODE_ID) WHERE p1.TYPE=:p1 AND p2.TYPE=:p2 AND p2.LOCAL_ID=:p3 GROUP BY p1.LOCAL_ID] [wrapped: SQLSTATE[42000]: [Microsoft][SQL Server Native Client 11.0][SQL Server]The multi-part identifier \"panel_code.LOCAL_ID\" could not be bound.]

은 물론, 선택 조항이 문제가 발생합니다 : 문 위

PanelDataQuery::create() 
      ->select(array('p1.localId')) 
      ->withColumn('count(1)', 'amount') 
      ->usePanelDataHasCodeQuery('pp1')->usePanelCodeQuery('p1')->groupByLocalId()->filterByType($type)->endUse()->endUse() 
      ->usePanelDataHasCodeQuery('pp2')->usePanelCodeQuery('p2')->filterByType('model')->filterByLocalId($model)->endUse()->endUse() 
      ->find(); 

오류를 반환합니다. 모든 아이디어 propel 테이블 이름으로 변환하는 대신 테이블 별칭을 사용하도록 강제하는 방법?

도움을 주셔서 감사합니다.

답변

0

발견 부분 용액 :

PanelDataQuery::create() 
    ->withColumn('p1.local_id','localId') 
    ->withColumn('count(1)', 'amount') 
    ->select(array('localId','amount')) 
    [...] 

잘 작동하는 것으로 보인다. Altought 다른 해결책을 고맙게 생각합니다. addJoinCondition에서 비슷한 문제를 처리하는 방법은 여전히 ​​좋습니다.

은 내가 교체 할 때 :

->filterByType('model')->filterByLocalId($model) 

원래 쿼리에서 함께 :

->addJoinCondition('p2', 'p2.localId = ?', $model) 
->addJoinCondition('p2', "p2.type = 'model'"); 

나는 비슷한 문제를 가지고 오류에 명시된 : 펠은 '외설하는 panel_code.local_id하는 p2.localId 변환 올바른 (별명이있는 다중 panel_code 테이블 조인이 조회에 포함됨).

관련 문제