CLI 配置帮助程序 - 多个实体管理器



我在Slim 3中使用Doctrine 2.5。我有两个实体经理主从。在 Cli-Config.php 文件中,当我创建帮助程序并传递实体管理器及其连接时

,如下所示,
$helpers = new SymfonyComponentConsoleHelperHelperSet([
    'db'            => new DoctrineDBALToolsConsoleHelperConnectionHelper($defaultEntityManager->getConnection()),
    'em'            => new DoctrineORMToolsConsoleHelperEntityManagerHelper($defaultEntityManager),
    'db_customer'   => new DoctrineDBALToolsConsoleHelperConnectionHelper($customerEntityManager->getConnection()),
    'em_customer'   => new DoctrineORMToolsConsoleHelperEntityManagerHelper($customerEntityManager),
]);
return $helpers;

现在在控制台中,当我尝试命令时

php vendor/doctrine/orm/bin/doctrine orm:schema-tool:create 

仅创建与$defaultEntityManager实体管理器相关的架构 未创建与实体管理器相关的架构$customerEntityManager

我可以尝试的任何想法/建议?

doctrine 的 cli 脚本期望在返回的 HelperSet 中定义 'em'。这将用于创建架构。

你可以在这里看到它

要解决此问题,一种方法是创建 2 个目录,如下所示:

  • 配置A
  • 配置B

并在每个脚本中放置 2 个不同的 cli-config.php 脚本:

$helpers = new SymfonyComponentConsoleHelperHelperSet([
    'db'            => new DoctrineDBALToolsConsoleHelperConnectionHelper($defaultEntityManager->getConnection()),
    'em'            => new DoctrineORMToolsConsoleHelperEntityManagerHelper($defaultEntityManager),
]);

$helpers = new SymfonyComponentConsoleHelperHelperSet([
    'db'   => new DoctrineDBALToolsConsoleHelperConnectionHelper($customerEntityManager->getConnection()),
    'em'   => new DoctrineORMToolsConsoleHelperEntityManagerHelper($customerEntityManager),
]);

最后,运行:

php ../vendor/doctrine/orm/bin/doctrine orm:schema-tool:create

从每个目录

创建自己的脚本

或者,您可以根据 doctrine

的 cli 脚本创建自己的脚本,例如将其命名为"doctrine.php":

#!/usr/bin/env php
<?php
use SymfonyComponentConsoleHelperHelperSet;
use DoctrineORMToolsConsoleConsoleRunner;
require_once __DIR__ . '/vendor/autoload.php';
$commands = [];
$helper1 = new SymfonyComponentConsoleHelperHelperSet([
    'db'            => new DoctrineDBALToolsConsoleHelperConnectionHelper($defaultEntityManager->getConnection()),
    'em'            => new DoctrineORMToolsConsoleHelperEntityManagerHelper($defaultEntityManager),
]);
$helper2 = new SymfonyComponentConsoleHelperHelperSet([
    'db'   => new DoctrineDBALToolsConsoleHelperConnectionHelper($customerEntityManager->getConnection()),
    'em'   => new DoctrineORMToolsConsoleHelperEntityManagerHelper($customerEntityManager),
]);

ConsoleRunner::run($helper 1, $commands(; ConsoleRunner::run($helper 2, $commands(;

将其放在项目的根目录上,并按以下方式运行:

php doctrine.php orm:schema-tool:create

我的解决方案是:

#!/usr/bin/env php
<?php
use DoctrineORMToolsConsoleConsoleRunner;
$commands = [];
$emList = [
        $emFoo,
        $emBar,
        $emZoo
];
foreach ($emList as $em) {
    $acpApp = ConsoleRunner::createApplication(ConsoleRunner::createHelperSet($em, $commands));
    $acpApp->setAutoExit(false);
    $acpApp->run();
}

相关内容

  • 没有找到相关文章