使用Propel嵌套的SQL语句?

时间:2012-07-16 07:24:38

标签: sql symfony1 symfony-1.4 propel

我正在尝试将SQL语句翻译成Propel,但没有那么成功。我有这个SQL语句:

SELECT id, param1, param2
              FROM Field1
              WHERE id
              in
              (
                  SELECT DISTINCT Field1_id
                  FROM Field2
                  WHERE id in
                  (
                      SELECT DISTINCT `Field2_id`
                      FROM `Field3`
                      WHERE
                      `param7` is null
                      AND param5 > 40
                  )
              ) LIMIT 0, 1000

我开始以原始的方式做这件事:

$connection = Propel::getConnection();
$query = "my Query";
$statement = $connection->prepare($query);
$statement->execute();
$results = $statement->fetch(PDO::FETCH_ASSOC);

这很好用,但我不能对$ results做任何Propel Actions因为它是一个数组。

那么如何在没有原始方式的情况下将此SQL转换为Propel?

2 个答案:

答案 0 :(得分:1)

一个很好的快速解决方法是在数据库中创建一个视图,并在Propel中为该视图设置一个只读表。然后,您可以像使用普通的Propel表一样使用视图模型。现在当然这个作弊,并且受到ORM纯粹主义者的不满,但它会让你在短期内进行。

我的方法是尝试重构回我已经用于简单查询的表,但对于大型的中央查询(特别是用于主要下钻屏幕的复杂查询)我已经更多了非常乐意永久保持观点。

答案 1 :(得分:0)

据我所知,Propel不处理嵌套查询。相反,您可以写table subqueries