taskでデータベースにアクセスする
前回に引き続き、symfonyのタスクについてめも。
今回は、タスク内でデータベースにアクセスしてみます。
jobeetを行った時に作成したもので試してみました。
以下、サンプル。
addOptions(array( new sfCommandOption('application', null, sfCommandOption::PARAMETER_REQUIRED, 'The application name'), new sfCommandOption('env', null, sfCommandOption::PARAMETER_REQUIRED, 'The environment', 'dev'), new sfCommandOption('connection', null, sfCommandOption::PARAMETER_REQUIRED, 'The connection name', 'propel'), // add your own options here )); $this->namespace = 'hoge'; $this->name = 'testDatabaseAccess'; $this->briefDescription = ''; $this->detailedDescription = <<configuration); $connection = $databaseManager->getDatabase($options['connection'] ? $options['connection'] : null)->getConnection(); // add your code here $c = new Criteria(); $c->addDescendingOrderByColumn(JobeetJobPeer::COMPANY); $jobs = JobeetJobPeer::doSelect($c); foreach($jobs as $job) { $id = $job->getId(); $com = $job->getCompany(); echo "$id, $com\n"; } } }
今回は、すべてのレコードをcompanyで昇順に並び替えてid, companyを表示しています。
generate:taskで生成されるテンプレートでデータベースコネクションの初期化されています。
正しい出力を出せるまでにいくつかエラーが出たのでめも。
Database "doctrine" does not exist.
これは、connectionが間違っていたため。config/schema.ymlを参照してpropelに修正。
jobeetはpropelで学習していたが、タスクのデフォルトだとdoctrineになっていたはず。
Unable to open PDO connection [wrapped: SQLSTATE[HY000] [2002] No such file or directory]
これはSQLサーバが上がっていなかったため。
sudo path/to/mysql.server start
で、起動する。