Doctrineで識別子を引用符で囲むようにする方法

たとえばfromというカラムがテーブル上にあったとして、

SELECT * FROM my_table WHERE from LIKE '%@gmail.com';

こんなクエリを実行しようとすると、エラーになってしまいます。fromが予約語だからですね。識別子に予約語が入る場合は、RDBMSの指定する引用符で囲んであげる必要があります。MySQLなら`(バッククオート)、PostgreSQLなら"(ダブルクオート)が識別子にあたります。

SELECT * FROM `my_table` WHERE `from` LIKE '%@gmail.com';

DoctrineでSQLを実行する際、デフォルトでは識別子で囲まれるようにはなっていません。そこで、Doctrine_Managerクラスに次のように設定してあげる必要があります。

<?php
$manager = Doctrine_Manager::getInstance();
$manager->setAttribute(Doctrine_Core::ATTR_QUOTE_IDENTIFER, true);
# Doctrine 1.2より前のバージョンでは Doctrine_Coreではなく Doctrine::ATTR_...

symfonyでこれらの設定をする場合はconfig/ProjectConfiguration.class.phpで行います。

<?php
// autoloading...

class ProjectConfiguration extends sfProjectConfiguration
{
  // ...

  public function configureDoctrine(Doctrine_Manager $manager)
  {
    $manager->setAttribute(Doctrine_Core::ATTR_QUOTE_IDENTIFIER, true);
  }
}

configureDoctrine()メソッドを定義しておくと自動的に読み込まれます。その際にManagerが引数で渡されるのでここで設定してあげます。他によく使うのは、ATTR_USE_DQL_CALLBACKSとか、ATTR_RESULT_CACHEとかですかね。

ちなみに自分自身でクオートしたい場合は、Doctrine_ConnectionオブジェクトのquoteIdentifier()で行えます。
あとはデータベース名に-(ハイフン)が入っている時とかも、これ指定しないとだめだったと思います。

http://www.doctrine-project.org/documentation/manual/1_2/en/configuration

上記のドキュメントページに色々ありますので参考にどうぞ。