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