Propel PHPフレームワークのv1.3をアプリケーション用に使用しています。Criteria
オブジェクトを使用して派生テーブルから選択する方法が見つかりません。Propelの派生テーブルからどのように選択できますか?
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がこれよりも複雑ですが、それはちょうど、さらに参加しています私がしたいSQLの一部があります。
残念ながら、テーブル定義をSQLエスケープしようとしましたが、Criteria::addAlias()
を使用しようとしました。私は最終的にそのような方法でSQLを書くことをあきらめ、ビュー(この例ではunisoned_table
と呼ばれる)を作成しました。
Iは次の追加しようとし、このテーブルに参加:
$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
SELECT列を削除すると、クロス結合が消えます。
私はこれをどのように行うことができますか?このCriteria
を修正する必要があるかもしれない(列の置き換え、余分な条件の追加など)、またはdoCount()
呼び出しで使用される可能性があるため、裸のカスタムSQLは使用できません。