Doctrine - 我可以在 - > andWhere()中使用真正的SQL(而不是DQL)吗?

时间:2010-01-19 20:31:51

标签: php orm doctrine doctrine-query

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

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

以上不起作用。但是,other_table没有Doctrine类,并且doctrine一直在尝试加载文件other_file.php。我已经发现它将它解释为DQL(对吧?)。有没有我可以告诉Doctrine不要将它解释为DQL,以便我可以使用原始SQL?

我知道我可以使用Doctrine_RawSql,但这会涉及重写所有这些查询。如果有一个中途的房子会很好。

2 个答案:

答案 0 :(得分:3)

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

所有RawSql查询都要求选择的每个表都映射到一个'Component',它实际上是一个Doctrine_Record类。

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

否则,您将不得不使用以下方式删除原始PDO:

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

请参阅Doctrine_RawSql

答案 1 :(得分:2)

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

也许使用Doctrine 2.0 - 这是在今年年底宣布的......哪个不是很快^^