我正在为一个应用程序使用推进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转义。我最终放弃了以这种方式编写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
. 奇怪的是,如果我移除
选择“列”,则交叉连接将消失。
有人对我如何做到这一点有什么建议吗?我不能只使用简单的定制SQL,因为
标准
可能需要修改(替换列、添加额外条件等)或用于
doCount()
呼叫