3

我正在尝试将 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 执行任何推进操作,因为它是一个数组。

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

4

2 回答 2

1

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

我的方法是尝试重构回表,在这些表中我将它用于一个简单的查询,但对于大型的中央查询(特别是用于主要向下钻取屏幕的复杂查询),我非常乐意永久保持视图方法。

于 2012-07-18T22:57:56.990 回答
0

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

于 2012-07-16T07:43:08.973 回答