我正在使用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
,但这会涉及重写所有这些查询。如果有一个中途的房子会很好。
答案 0 :(得分:3)
不幸的是,对于Doctrine 1.x,即使使用RawSql也无法做到这一点。
所有RawSql查询都要求选择的每个表都映射到一个'Component',它实际上是一个Doctrine_Record类。
为其他表添加一个类可能会更好,即使它很简单,也从未在其他任何地方使用过。
否则,您将不得不使用以下方式删除原始PDO:
$dbh = Doctrine_Manager::connection()->getDbh();
答案 1 :(得分:2)
即使能够做这种事情(即使用未映射到Doctrine类的DB表,并使用pure-raw-SQL),我认为这不可能与Doctrine 1.x
也许使用Doctrine 2.0 - 这是在今年年底宣布的......哪个不是很快^^