【问题标题】:Get Kernel in Migration Symfony在迁移 Symfony 中获取内核
【发布时间】:2018-07-19 13:26:49
【问题描述】:

我想在迁移期间运行控制台应用程序。

$application = new Application($kernel);
    $application->setAutoExit(false);

    $input = new ArrayInput(array(
       'command' => 'app:data-insert',  
    ));

    $output = new NullOutput();
    $application->run($input, $output)

如何在迁移文件中获取 KernelInterface $kernel? Symfony 3.3

【问题讨论】:

  • 你为什么不看看bin/console的样子?
  • 只想运行 bin/console d:m:m 并同时执行 app:data-insert。无需实际输入。更新数据可以是几十条命令。
  • 你为什么不运行bin/console app:data-insert呢?我不明白你在解决什么问题。请在您的问题中添加一些背景信息,以帮助我们了解您的问题。
  • 有很多用于更新数据的控制台命令(应用程序)。我只想编写迁移以将它们组合到一个地方。我实际上可以编写 bash 文件。但如果可以通过迁移实现,那么支持起来会更容易。
  • 那你为什么不创建一个 Makefile 呢?您可以使用一个别名执行所有命令

标签: php symfony console migration


【解决方案1】:

检查:https://symfony.com/doc/master/bundles/DoctrineMigrationsBundle/index.html#container-aware-migrations

$this->container->get('kernel');

个人意见:你可以这样做,但你不应该这样做。数据迁移命令有崩溃的趋势。如果发生崩溃,您最终可能会迁移到一半,并且可能会导致数据库模式处于错误状态。由于状态不佳,再次运行迁移将无法正常工作。

如果您这样做,至少不要混合架构和数据迁移,而是创建 2 个迁移。这样,如果数据迁移失败,至少它不会在第二次运行时尝试进行架构更改。

【讨论】:

  • 谢谢,我忘了我们实际上有一个容器。我只是想尝试新的方式。但是你的通知和其他的真的很好。我会考虑的。
猜你喜欢
  • 1970-01-01
  • 2023-04-04
  • 2018-09-17
  • 2018-11-04
  • 1970-01-01
  • 2014-11-28
  • 1970-01-01
  • 1970-01-01
  • 2021-11-29
相关资源
最近更新 更多