0

我正在 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();
  }
}

(按照symfony-project.org 上的示例)

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

4

1 回答 1

4

这是处理任务时的常见问题。您有 2 个选项:

  • default在 database.yml 中命名您的学说连接
  • 在 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();
  }
}
于 2012-04-17T15:28:41.750 回答