6

我正在尝试使用 Propel ORM 创建一个 UNION 查询,例如

$criterion1 UNION $criterion2

有谁知道如何做到这一点?

4

2 回答 2

4

您不能使用 Criteria 创建联合查询。相反,您可以自己创建 SQL 字符串,并使用它来水合对象。如果您仍想使用 Criteria 来构建联合查询的两个部分,您可以调用BasePeer::createSelectSql(Criteria $criteria, array &$params). 这将返回一个 SQL 字符串,其中?包含 PDO 层需要设置的值。第二个参数是一个将用这些参数填充的数组(这就是您通过引用传递它的原因)。您可以将其传递给PDOStatement::execute(array $params)函数。

于 2010-01-02T12:13:15.630 回答
2

想到了两个解决方案。首先,最简单的方法是运行两个单独的调用,然后将array_merge它们粘合在一起。根据您的用例,这可能不像您想象的那么耗时。

此外,如果您在编写查询时遇到困难,请使用您想要的查询编写一个视图,然后将其放入您的 Propel 模型中。我在 Propel/symfony 1.x 中有一堆非常复杂的主从屏幕,这种方法很有效。它确实有点违背使用 ORM 的理念,但是嘿,偶尔打破规则很有趣!:)

于 2011-09-29T18:21:31.343 回答