1
我對應用程序使用Propel PHP框架的v1.3,我找不到使用Criteria
對象從派生表中選擇的方法。我想要的SQL的一部分是:如何從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比這更復雜,但只包括進一步的連接。
我試過使用Criteria::addAlias()
,但不幸的是,它嘗試SQL轉義表定義。我最終放棄嘗試以這種方式編寫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
SELECT列,則交叉連接消失。
有沒有人有任何建議,我怎麼能做到這一點?我不能只使用裸定製SQL,因爲可能需要修改(更換列,添加額外條件等),或在doCount()
調用中使用此Criteria
。