2014-02-25 1 views
1

Propel에서 어떻게 작성하나요? 스키마 :비 모델 조인 Propel

obj 
-- 
id 
object_id 

foo 
-- 
id 

SQL :

SELECT f.* 
FROM 
    foo f INNER JOIN obj o ON f.id=o.object_id 
ORDER BY 
    o.id 
; 

PHP :

$join = new \Join(); 
$join->addExplicitCondition(
    'foo', 'id', 'f', 
    'obj', 'object_id', 'o', 
    \Join::EQUAL 
); 

$join->setJoinType(\Criteria::INNER_JOIN); 

$objectsQuery = FooQuery::create() 
    ->setModelAlias('f', true) 
    ->addJoinObject($join, 'o') 
    ->addAscendingOrderByColumn('o.id') // error here 
    ; 

출력 : 내가 추진 1.7을 사용하고

Cannot fetch TableMap for undefined table: o 

. 그리고 "obj"와 "foo"(다형성 관계라고 가정 함) 사이에 모델 관계가 없습니다. 그리고 오히려 커스텀 SQL을 쓰는 것을 피할 것입니다. 고맙습니다.

+0

'addJoinObject'에 두 번째 매개 변수가 필요합니까? '-> addJoinObject ($ join)'만 해보십시오. –

+0

시도해 보니 ... 아무것도 바뀌지 않았습니다. – JohnSmith

+0

'-> addAscendingOrderByColumn ('obj.id')'를했다면 어떻게 될까요? –

답변

0

JoinObject를 추가해도 올바른 별칭이 추가되지 않으므로 직접 추가해야합니다. 이것은 작동합니다 :

$objectsQuery = FooQuery::create() 
    ->setModelAlias('f', true) 
    ->addJoinObject($join, 'o') // 'o' here makes no difference, actually 
    ->addAlias($join->getRightTableAlias(), $join->getRightTableName()) 
    ->addAscendingOrderByColumn('o.id');