1

PHPORMであるDoctrineを使用しています。Doctrine Queryを作成しましたが、さらに制御する必要があります。そこで、->andWhere(...)メソッドを使用して新しいwhere句を追加し始めました。ただし、次のように、別のテーブルに基づいてサブクエリを実行する必要があります。

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

上記は機能しません。ただし、other_tableのDoctrineクラスはなく、doctrineはファイルのロードを試み続けますother_file.php。これをDQLとして解釈していることがわかりました(右?)。どういうわけか、これをDQLとして解釈しないようにDoctrineに指示して、生の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テーブルを使用し、pure-raw-SQLを使用して)、Doctrine1.xでは不可能だと思います。

たぶんDoctrine2.0で-今年の終わりに発表されます...すぐにはありません^^

于 2010-01-19T20:36:26.603 に答える