【问题标题】:Doctrine - Can I use real SQL (not DQL) in a ->andWhere()?Doctrine - 我可以在 ->andWhere() 中使用真正的 SQL(不是 DQL)吗?
【发布时间】:2011-01-06 23:58:02
【问题描述】:

我正在使用 Doctrine,一个 PHP ORM。我创建了一个 Doctrine Query,我需要更多的控制权。所以我开始使用->andWhere(...) 方法来添加新的where 子句。但是我需要基于另一个表做一个子查询,像这样:

$query->andWhere("id in (SELECT id from other_table where value = ?)", $myvar);

以上行不通。然而,other_table 没有 Doctrine 类,并且教义不断尝试加载文件other_file.php。我发现它正在将其解释为 DQL(对吗?)。有什么方法可以告诉 Doctrine 不要将其解释为 DQL,以便我可以使用原始 SQL?

我知道我可以使用Doctrine_RawSql,但这需要重写所有这些查询。如果有中途宿舍就好了。

【问题讨论】:

    标签: php orm doctrine doctrine-query


    【解决方案1】:

    即使能够做这种事情(即使用未映射到 Doctrine 类的 DB 表,并使用纯原始 SQL),我认为这是不可能的使用 Doctrine 1.x

    也许在今年年底宣布的 Doctrine 2.0... 不会很快 ^^

    【讨论】:

      【解决方案2】:

      不幸的是,Doctrine 1.x 无法做到这一点,即使使用 RawSql。

      所有 RawSql 查询都要求将每个选定的表映射到一个“组件”,这实际上是一个 Doctrine_Record 类。

      为另一个表添加一个类可能会更好,即使它非常简单并且从未在其他任何地方使用过。

      否则,您将不得不使用以下方法进入原始 PDO:

      $dbh = Doctrine_Manager::connection()->getDbh();
      

      Doctrine_RawSql

      【讨论】:

      • 感谢您提供的信息。我喜欢 Doctrine 和其他 orm 的总体思路,但我一直担心它的性能问题。
      • @jspcal:谢谢,我以为你已经为我准备好了:P
      猜你喜欢
      • 1970-01-01
      • 2012-07-16
      • 2012-11-15
      • 2012-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多