php - Doctrine cli 中的多种环境

标签 php doctrine command-line-interface

我正在尝试对多个数据库进行架构更新,具体取决于所使用的配置环境,更改将在数据库或其他数据库中完成。

我试图将自己的 --env 参数添加到 Doctrine 脚本中:

vendor/bin/doctrine --env=dev orm:schema-tool:update --force -vvv --dump-sql

在我的 cli-config.php 中,我读取了参数并选择了我的数据库,但之后它失败了:

[RuntimeException]                  
The "--env" option does not exist.  

Exception trace:
() at /var/www/consupermiso2-frontend/vendor/symfony/console/Input/ArgvInput.php:213
Symfony\Component\Console\Input\ArgvInput->addLongOption() at /var/www/consupermiso2-frontend/vendor/symfony/console/Input/ArgvInput.php:152
Symfony\Component\Console\Input\ArgvInput->parseLongOption() at /var/www/consupermiso2-frontend/vendor/symfony/console/Input/ArgvInput.php:86
Symfony\Component\Console\Input\ArgvInput->parse() at /var/www/consupermiso2-frontend/vendor/symfony/console/Input/Input.php:61
Symfony\Component\Console\Input\Input->bind() at /var/www/consupermiso2-frontend/vendor/symfony/console/Command/Command.php:231
Symfony\Component\Console\Command\Command->run() at /var/www/consupermiso2-frontend/vendor/symfony/console/Application.php:878
Symfony\Component\Console\Application->doRunCommand() at /var/www/consupermiso2-frontend/vendor/symfony/console/Application.php:195
Symfony\Component\Console\Application->doRun() at /var/www/consupermiso2-frontend/vendor/symfony/console/Application.php:126
Symfony\Component\Console\Application->run() at /var/www/consupermiso2-frontend/vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Console/ConsoleRunner.php:60
Doctrine\ORM\Tools\Console\ConsoleRunner::run() at /var/www/consupermiso2-frontend/vendor/doctrine/orm/bin/doctrine.php:66
include() at /var/www/consupermiso2-frontend/vendor/doctrine/orm/bin/doctrine:4


orm:schema-tool:update [--complete] [--dump-sql] [-f|--force]

如何选择使用 cli 工具在哪个数据库中工作?

最佳答案

因此,我们假设您有一个应用程序,它有自己的数据库,并且它使用单独的数据库来存储其所有帮助系统数据。该帮助数据库可以在同一服务器上不同的应用程序安装之间共享。

在 Symfony 中,可以轻松指定不同的实体管理器,以便您可以挑选要使用的实体管理器。这可以通过命令行或 Controller 轻松完成。

在您的 config.yml 文件中,您将有类似这样的内容(这些参数将位于 parameters.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
            help:
                driver:   "%database_driver2%"
                host:     "%database_host2%"
                port:     "%database_port2%"
                dbname:   "%database_name2%"
                user:     "%database_user2%"
                password: "%database_password2%"
                charset:  UTF8

orm:
    default_entity_manager: default
    entity_managers:
        default:
            connection: default
            mappings:
                MainBundle: ~
        help:
            connection: customer
            mappings:
                HelpBundle: ~d

然后您将能够从命令行指定要使用的数据库,如下所示:

php app/console doctrine:schema:update --force --em=help

或者在 Controller 中像这样:

$entityManager = $this->get('doctrine')->getManager('help');

如果您需要更多信息,请查看symfony docs

关于php - Doctrine cli 中的多种环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32023737/

相关文章:

php - PDO::ATTR_AUTOCOMMIT 忽略非事务性 INSERT/UPDATE

php - mysql漏洞。将数据保存在 php 文件或 mysql 数据库中

javascript - 使用 .load() 函数后,脚本函数将无法工作

php - Doctrine 和 Zend_Form 验证

symfony - 带有 Doctrine ORM 的 Silex 身份验证系统

azure - 尝试在 Azure CLI 中显示 eventgrid 的事件订阅时出错

php - 我如何在 CakePHP 中使用缓存?

forms - Symfony Doctrine - 如何生成 optgroup 选择表单

php - 从命令行在我的网站上运行 .php 脚本

mysql - 为什么 MySQL 命令行客户端拒绝我的语句,而 Workbench 对此没有问题?