1

我正在使用 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,但这将涉及重写所有这些查询。如果有中途的房子就好了。

4

2 回答 2

3

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

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

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

否则,您将不得不使用以下方法降级到原始 PDO:

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

Doctrine_RawSql

于 2010-01-19T20:46:10.370 回答
2

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

也许与 Doctrine 2.0 一起——今年年底宣布......这不会很快 ^^

于 2010-01-19T20:36:26.603 回答