我正在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?
答案 0 :(得分:4)
使用任务时这是一个常见问题。您有两个选择:
default
对于选项#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();
}
}