3

我有两个数据库(MySQL 和 Oracle),我连接了 betweek sf2 和两个数据库,这是我的 config.yml 文件:

doctrine:
dbal:
    default_connection:   default
    connections:
        default:
            driver:   "%database_driver%"
            host:     "%database_host%"
            port:     "%database_port%"
            dbname:   "%database_name%"
            user:     "%database_user%"
            password: "%database_password%"
            charset:  UTF8
            # if using pdo_sqlite as your database driver, add the path in parameters.yml
            # e.g. database_path: "%kernel.root_dir%/data/data.db3"
            # path:     "%database_path%"
        sysman:
            driver:   %database_driver2%
            host:     %database_host2%
            port:     %database_port2%
            dbname:   %database_name2%
            user:     %database_user2%
            password: %database_password2%
            charset:  UTF8

我的问题是,我如何在第二个数据库(Oracle)上运行控制台命令,像(doctrine:database:create ...)这样的命令,谢谢

4

2 回答 2

2

使用--connection参数:

php app/console doctrine:database:create --connection=default

或者

php app/console doctrine:database:create --connection=sysman
于 2014-05-05T17:55:35.207 回答
0

您应该首先阅读有关命令以及如何将选项和参数传递给命令的教程。以及如何区分选项和参数。

如果你想制作自己的命令......

您可能希望这样做 - 如果您不传递选项(您将使用默认数据库),如果您传递它,您将确保它是一个有效的选项,并使用传递的数据库连接名称。

Doctrine 与 Mysql 没有紧密耦合,您可以使用几乎所有最常见的可用数据库。

另请注意,命令是容器感知的。这意味着您的命令可以访问容器,尽管您可以访问您的服务,例如教义:

protected function execute(InputInterface $input, OutputInterface $output)
{
    $connection $input->getArgument('connection');
    # Validate connection argument here and use it below

    $container = $this->getContainer();
    $em = $container->get('doctrine')->getManager(); // default db
    $em = $container->get('doctrine')->getManager('sysman'); // another

    return 1;
}

我在没有测试的情况下编写了代码,请原谅我可能犯的任何错误。

php app/console doctrine:mapping:info --em=default (same without em option)
php app/console doctrine:mapping:info --em=sysman
于 2014-05-05T20:53:08.880 回答