【问题标题】:nested SQL Statements with Propel?带有 Propel 的嵌套 SQL 语句?
【发布时间】:2012-07-15 00:49:02
【问题描述】:

我正在尝试将 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?

【问题讨论】:

    标签: sql symfony1 symfony-1.4 propel


    【解决方案1】:

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

    我的方法是尝试重构回表,在这些表中我将其用于简单查询,但对于大型集中查询(特别是用于主要向下钻取屏幕的复杂查询),我已经更多很乐意永久保持视图方法。

    【讨论】:

    • 真是个好主意!我现在就用它!但我不能接受你的回答,因为我真的很想看看人们如何以“正确”的方式解决它。谢谢
    • 没问题。如果您需要帮助,请在此处联系我 - 不要忘记 Propel 网站上的架构文档非常好。我认为你需要的是<table readOnly="true" name="x">
    【解决方案2】:

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

    【讨论】:

    • 我的问题更多是 DISTINCT 关键字!不知道如何在这种情况下与 Propel 一起使用它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    相关资源
    最近更新 更多