gpt4 book ai didi

symfony - 如何从迁移类加载 Symfony2 固定装置?

转载 作者:行者123 更新时间:2023-12-04 23:21:34 25 4
gpt4 key购买 nike

我们已经建立了一组数据固定装置,用我们所有的引用值为数据库做种子。我们也在使用 DoctrineMigrationsBundle管理架构更新。我们希望在初始模式迁移类中触发夹具加载,以便在运行任何其他模式更新之前填充系统。

我在文档中发现您可以制作 migration classes container aware ,但我不知道如何从那个跳转到调用/运行数据装置。我还没有在 Stackoverflow 或通过谷歌找到任何好的答案。有没有人做过这个并且可以指出我正确的方向? (或有关于管理种子数据与模式迁移的更好方法的建议)。谢谢。

这是使用 Symfony 版本:2.4

最佳答案

这是一个有趣的问题。我找到了“肮脏”的解决方案,但效果很好。


namespace Application\Migrations;

use Doctrine\DBAL\Migrations\AbstractMigration;
use Doctrine\DBAL\Schema\Schema;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\DependencyInjection\ContainerAwareInterface;

class Version20140811164659 extends AbstractMigration implements ContainerAwareInterface
{
private $container;

public function setContainer(ContainerInterface $container = null)
{
$this->container = $container;
}

public function up(Schema $schema)
{
// ... your code here
}

public function postUp(Schema $schema)
{
// here you have to define fixtures dir
$this->loadFixtures('src/Acme/BlogBundle/DataFixtures/ORM');
}

public function down(Schema $schema)
{
// ... your code here
}

public function loadFixtures($dir, $append = true)
{
$kernel = $this->container->get('kernel');
$application = new \Symfony\Bundle\FrameworkBundle\Console\Application($kernel);
$application->setAutoExit(false);

//Loading Fixtures
$options = array('command' => 'doctrine:fixtures:load', "--fixtures" => $dir, "--append" => (boolean) $append);
$application->run(new \Symfony\Component\Console\Input\ArrayInput($options));
}
}

此解决方案只需运行控制台命令 php app/console doctrine:fixtures:load --fixtures=src/Acme/BlogBundle/DataFixtures/ORM --append在“向上”迁移之后。
对不起,可怜的英语。如果您能找到明确的解决方案,请分享;)

关于symfony - 如何从迁移类加载 Symfony2 固定装置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24829122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com