Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony 4/2插入初始数据库数据_Php_Symfony_Doctrine_Doctrine Migrations - Fatal编程技术网

Php Symfony 4/2插入初始数据库数据

Php Symfony 4/2插入初始数据库数据,php,symfony,doctrine,doctrine-migrations,Php,Symfony,Doctrine,Doctrine Migrations,我正在使用symfony 4.2,并寻找将初始数据插入数据库的方法。 我试图创建的是一个类似于初始设置脚本的脚本,它可以执行一些sql插入(如fixture,但也适用于生产环境),这些sql插入可以由控制台命令调用 我曾考虑在条令迁移类中使用postp函数,但我不想为我设置的每个生产环境重写此函数。 是否有一种方法可用于此目的,或者有一种首选方法 工作流示例: 通过克隆git存储库安装symfony 执行迁移以创建/更新数据库表 执行安装脚本,将所需的默认值插入数据库表 在生产中使用该捆绑包

我正在使用symfony 4.2,并寻找将初始数据插入数据库的方法。 我试图创建的是一个类似于初始设置脚本的脚本,它可以执行一些sql插入(如fixture,但也适用于生产环境),这些sql插入可以由控制台命令调用

我曾考虑在条令迁移类中使用postp函数,但我不想为我设置的每个生产环境重写此函数。 是否有一种方法可用于此目的,或者有一种首选方法

工作流示例:

  • 通过克隆git存储库安装symfony
  • 执行迁移以创建/更新数据库表
  • 执行安装脚本,将所需的默认值插入数据库表

在生产中使用该捆绑包 虽然不鼓励这样做,因为您可能会意外地使用它删除生产数据库,但我确实看到了在生产环境中使用dotrine fixtures捆绑包的一些有效用例

您可以编辑
config/bundles.php
,以便在生产环境中启用捆绑包

改变

Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['dev' => true, 'test' => true],

创建自己的夹具加载命令 也不鼓励使用条令功能手动加载装置,但这样可以添加额外的检查,例如仅填充新数据库

$fixtures = (new \Doctrine\Common\DataFixtures\Loader())->loadFromDirectory(__DIR__ . '/../src/DataFixture');
$loader = new \Doctrine\Bundle\FixturesBundle\Loader\SymfonyFixturesLoader(new \Symfony\Component\DependencyInjection\Container());
$loader->addFixtures(
    array_map(
        function ($fixture) {
            return [
              'fixture' => $fixture,
              'groups' => []
            ];
        },
        $fixtures
    )
);

$purger = new Doctrine\Common\DataFixtures\Purger\ORMPurger($entityManager);

$executor = new Doctrine\Common\DataFixtures\Executor\ORMExecutor($entityManager, $purger);
$executor->execute(
    $loader->getFixtures()
);

所以,创建一个命令并运行它。最后,我就是这样做的。我创建了一个自定义命令,通过ContainerInterface加载条令管理器。我不熟悉自定义命令的创建。以下是我使用的参考资料:
$fixtures = (new \Doctrine\Common\DataFixtures\Loader())->loadFromDirectory(__DIR__ . '/../src/DataFixture');
$loader = new \Doctrine\Bundle\FixturesBundle\Loader\SymfonyFixturesLoader(new \Symfony\Component\DependencyInjection\Container());
$loader->addFixtures(
    array_map(
        function ($fixture) {
            return [
              'fixture' => $fixture,
              'groups' => []
            ];
        },
        $fixtures
    )
);

$purger = new Doctrine\Common\DataFixtures\Purger\ORMPurger($entityManager);

$executor = new Doctrine\Common\DataFixtures\Executor\ORMExecutor($entityManager, $purger);
$executor->execute(
    $loader->getFixtures()
);