バッチのタスクでデータベースを使う場合

symfony1.0系とそれ以降の違いで大きなものの1つがバッチ処理の管理方法です。
1.0系ではバッチ用のコントローラーをbatchディレクトリに作成していましたが、1.1系以降ではタスク(コマンド)で管理します。

もちろん、初期化コマンドが用意されているのでgenerate:taskにネームスペースとタスク名をわたすだけでOKです。

$ ./symfony generate:task batch:taskname

で、タスクの中でDBアクセスを行う場合は、本家では

    $databaseManager = new sfDatabaseManager($this->configuration);

を記述するように書かれていますが、
ref: http://www.symfony-project.org/blog/2008/06/14/batches-are-dead-long-life-to-tasks

このまま記述してタスクを実行しても次のようなエラーになります。

$ ./symfony batch:taskname
PHP Catchable fatal error:  Argument 1 passed to sfDatabaseManager::__construct() must be an instance of sfApplicationConfiguration, instance of ProjectConfiguration given, 

原因はアプリケーション名を指定していないからでした。
生成されたタスクファイルの以下の行をコメントアウトを外し、アプリケーション名をオプションで必ず渡すようにします。

  $this->addArgument('application', sfCommandArgument::REQUIRED, 'The application name');

これで、

$ ./symfony batch:taskname admin

のようにアプリケーション名を渡すことでデータベースアクセスが正常にできました。
よく考えてみれば当たり前だけどハマった。