Propel의 파생 테이블에서 어떻게 선택할 수 있습니까?
문제
응용 프로그램에 Propel PHP 프레임 워크의 v1.3을 사용하고 있으며, Criteria
물체. 내가 원하는 SQL의 일부는 다음과 같습니다.
SELECT unioned_table.foo, quux.stuff, baz.more_stuff...
FROM
quux
INNER JOIN
(SELECT foo, bar FROM table1
UNION
SELECT foo, bar FROM table2
) AS unioned_table
ON quux.field = unioned_table.foo
INNER JOIN baz
ON baz.blah = unioned_table.bar
INNER JOIN ...
WHERE conditions...
실제 SQL은 이것보다 더 복잡하지만 추가 조인이 포함됩니다.
나는 사용하려고 노력했다 Criteria::addAlias()
, 불행히도 그것은 테이블 정의를 SQL-escape를 시도합니다. 나는 결국 그런 식으로 SQL을 쓰려고 노력했고보기를 만들었습니다 ( unisoned_table
이 예에서).
다음 으로이 테이블에 조인을 추가하려고했습니다.
$c->addSelectColumn('unioned_table.foo');
$c->addSelectColumn(QuuxPeer::STUFF);
$c->addSelectColumn(BazPeer::MORE_STUFF);
// ...
$c->addJoin(QuuxPeer::FIELD, 'unioned_table.foo', Criteria::INNER_JOIN);
$c->addJoin(BazPeer::BLAH, 'unioned_table.bar', Criteria::INNER_JOIN);
// ...
$c->add(QuuxPeer::STUFF, $someval);
// ...
슬프게도 이것은보기가 결합된다 두 배 - 한 번 내부 가입 qux
, 그리고 한 번은 크로스 가입으로 baz
. 기괴하게, 내가 제거하면 baz
열을 선택한 다음 크로스 조인이 사라집니다.
내가 어떻게 할 수 있는지에 대한 제안이 있습니까? 이렇게는 Bare Custom SQL 만 사용할 수 없습니다. Criteria
수정 (열 교체, 추가 조건 등)을 수정하거나 doCount()
전화.
해결책
주문이 중요하다는 것이 밝혀졌습니다 Criteria::addJoin()
; 조인을 변경하여 읽습니다.
$c->addJoin(QuuxPeer::FIELD, 'unioned_table.foo', Criteria::INNER_JOIN);
$c->addJoin('unioned_table.bar', BazPeer::BLAH, Criteria::INNER_JOIN);
문제를 수정했습니다.
제휴하지 않습니다 StackOverflow