Доктрина - Могу ли я использовать реальный SQL (не DQL) в -> andWhere ()? - PullRequest
1 голос
/ 19 января 2010

Я использую 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 ]

3 голосов
/ 19 января 2010

К сожалению, с Doctrine 1.x это невозможно сделать, даже используя RawSql.

Все запросы RawSql требуют, чтобы каждая выбранная таблица отображалась в «Компонент», который действительно является классом Doctrine_Record.

Возможно, вам лучше будет добавить класс для этой другой таблицы, даже если она глупо проста и никогда больше не используется.

В противном случае вам придется перейти на сырой PDO, используя:

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

См. Doctrine_RawSql

2 голосов
/ 19 января 2010

Даже если у вас есть возможность делать такие вещи (то есть использовать таблицы БД, которые не сопоставлены с классом Doctrine и используют чистый raw-SQL) , я не думаю, что это возможно с Учение 1.x

Может быть, с Doctrine 2.0 - который объявлен на конец этого года ... Который не скоро ^^

...