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

で、起動する。