【发布时间】:2014-02-25 16:55:31
【问题描述】:
如何在 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
;
输出:
Cannot fetch TableMap for undefined table: o
我正在使用 Propel 1.7。请注意,我在“obj”和“foo”之间没有模型关系(它应该是多态关系)。而且我宁愿避免编写自定义 SQL。谢谢。
【问题讨论】:
-
您确定需要
addJoinObject的第二个参数吗?试试->addJoinObject($join)。 -
试过了...没有任何变化。
-
如果你做了
->addAscendingOrderByColumn('obj.id')呢? -
->addAscendingOrderByColumn('obj.id')没有帮助。但是->addAlias($join->getRightTableAlias(), $join->getRightTableName())做到了。 -
发布得太早了 :) 忘记了 ENTER 发送评论 :P 有什么帮助,是
->addAlias($join->getRightTableAlias(), $join->getRightTableName())。所以,最终查询是:$objectsQuery = FooQuery::create()->setModelAlias('f', true)->addJoinObject($join, 'o')->addAlias($join->getRightTableAlias(), $join->getRightTableName())->addAscendingOrderByColumn('o.id');