【发布时间】:2009-12-31 14:34:34
【问题描述】:
我正在尝试使用 Propel ORM 创建一个 UNION 查询,例如
$criterion1 UNION $criterion2
有人知道怎么做吗?
【问题讨论】:
我正在尝试使用 Propel ORM 创建一个 UNION 查询,例如
$criterion1 UNION $criterion2
有人知道怎么做吗?
【问题讨论】:
您不能使用 Criteria 创建联合查询。相反,您可以create the SQL string yourself,并使用它来为对象补水。如果您仍想使用 Criteria 来构建联合查询的两个部分,可以致电 BasePeer::createSelectSql(Criteria $criteria, array &$params)。这将在需要由 PDO 层设置的值的位置返回一个带有? 的 SQL 字符串。第二个参数是一个将用这些参数填充的数组(这就是您通过引用传递它的原因)。您可以将其传递给PDOStatement::execute(array $params) 函数。
【讨论】:
想到了两个解决方案。首先,简单的方法是运行两个单独的调用,然后使用array_merge 将它们粘合在一起。根据您的用例,这可能不像您想象的那么耗时。
此外,如果您在编写查询时遇到困难,请使用您想要的查询编写一个视图,然后将其放入您的 Propel 模型中。我在 Propel/symfony 1.x 中有一堆非常复杂的主从屏幕,这种方法很有效。它确实有点违背使用 ORM 的理念,但是,偶尔打破规则很有趣! :)
【讨论】: