在自定义任务中使用doctrine

时间:2012-04-17 15:12:14

标签: doctrine symfony-1.4

我正在symfony 1.4项目中创建一个任务,我需要更新一些表。

我写过:

<?php
class dataImportTask extends sfBaseTask
{
  public function configure()
  {
    $this->namespace = 'data';
    $this->name      = 'import';

    $this->addOptions(array(
        new sfCommandOption('env', null, sfCommandOption::PARAMETER_REQUIRED, 'environment', 'dev'),
    ));
  }

  public function execute($arguments = array(), $options = array())
  {
    $databaseManager = new sfDatabaseManager(sfProjectConfiguration::getApplicationConfiguration('frontend', $options['env'], true));
    $connection = $databaseManager->getDatabase()->getConnection();
  }
}

(根据示例找到on symfony-project.org

但是当我执行任务时,symfony说:“Database "default" does not exist.”。为什么该任务不使用databases.yml中定义的dbname?

1 个答案:

答案 0 :(得分:4)

使用任务时这是一个常见问题。您有两个选择:

  • 在database.yml
  • 中命名了您的学说连接default
  • 在database.yml中保留相同的名称,并在每个任务上添加一个选项以检索正确的数据库名称。

对于选项#2,您必须添加一个包含数据库名称(database.yml中定义的名称)的选项,然后更改getDatabase的工作方式:

在database.yml中:

all:
  doctrine:
    class: sfDoctrineDatabase

根据上述学说名称,在任务中添加选项:

<?php
class dataImportTask extends sfBaseTask
{
  public function configure()
  {
    $this->namespace = 'data';
    $this->name      = 'import';

    $this->addOptions(array(
        new sfCommandOption('env', null, sfCommandOption::PARAMETER_REQUIRED, 'environment', 'dev'),
        new sfCommandOption('connection', null, sfCommandOption::PARAMETER_REQUIRED, 'The connection name', 'doctrine'),
    ));
  }

  public function execute($arguments = array(), $options = array())
  {
    $databaseManager = new sfDatabaseManager(sfProjectConfiguration::getApplicationConfiguration('frontend', $options['env'], true));
    $connection = $databaseManager->getDatabase($options['connection'])->getConnection();
  }
}