Php 如何在Symfony 2中管理大型初始应用程序数据

Php 如何在Symfony 2中管理大型初始应用程序数据,php,symfony,doctrine-orm,fixtures,Php,Symfony,Doctrine Orm,Fixtures,我正在开发一个需要大量初始数据的Symfony 2应用程序。几千行很容易。管理此数据集的好方法是什么 我一直在尝试Docrine迁移,但有点痛苦。数据加载一次,无法重新加载。如果数据中有bug,您需要进行另一次迁移来发现并纠正它,等等 我也一直在阅读有关固定装置的文章。这看起来更像我需要的,但它要求我编写PHP代码,将所有数据创建为实体。有几千个条目,这将是一个巨大的痛苦 有更好的选择吗?如果数据存储在文件中,您可以使用从该文件导入数据 您只需编写fixture类来解析数据文件,在一个新实体上设

我正在开发一个需要大量初始数据的Symfony 2应用程序。几千行很容易。管理此数据集的好方法是什么

我一直在尝试Docrine迁移,但有点痛苦。数据加载一次,无法重新加载。如果数据中有bug,您需要进行另一次迁移来发现并纠正它,等等

我也一直在阅读有关固定装置的文章。这看起来更像我需要的,但它要求我编写PHP代码,将所有数据创建为实体。有几千个条目,这将是一个巨大的痛苦


有更好的选择吗?

如果数据存储在文件中,您可以使用从该文件导入数据

您只需编写fixture类来解析数据文件,在一个新实体上设置数据,然后分配该实体

例如,如果数据存储在Yaml文件中,则类似这样的操作将起作用:

// src/Acme/DemoBundle/DataFixtures/ORM/LoadIntialData.php
namespace Acme\DemoBundle\DataFixtures\ORM;

use Doctrine\Common\DataFixtures\FixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
use Acme\DemoBundle\Entity\MyEntity;
use Symfony\Component\Yaml\Yaml;

class LoadIntialData implements FixtureInterface {

    public function load(ObjectManager $manager)
    {
        $filename =
            __DIR__ .
            DIRECTORY_SEPARATOR . '..' .
            DIRECTORY_SEPARATOR . '..' .
            DIRECTORY_SEPARATOR . 'Resources/data/data.yml';

        $yml = Yaml::parse(file_get_contents($filename));
        foreach ($yml as $data) {
            $entity = new MyEntity();

            $entity->setFoo($data['foo']);
            $entity->setBar($data['bar']);

            $manager->persist($entity);
        }

        $manager->flush();
    }

}

你的意思是你真的必须把所有的行都存储在内存中?这才是最好的选择。所有这些数据来自哪里?它是我的应用程序的初始数据集。它不是测试/夹具数据。所有在应用程序上工作的开发人员都需要这些数据(每个人都有自己的数据库),当应用程序进入暂存或生产阶段时,这些数据也需要存在。创建数据库转储并存储它可能更简单吗?@forgottenbas,正如我们尝试的那样。它在模式更改下不起作用。我们已经使用条令迁移进行架构更改。如果yml格式正确,您也可以使用alice:是否可以执行类似的操作,从同一个文件导入多个相关实体?@oflanabhra是的,您可以这样做。您还可以为每个实体使用单独的装置和数据文件。如果你有相关的实体,看看docsI的部分,你也有同样的问题。如何加载在其他实体中引用的100K行的数据。你认为它能与fixture方法addReference一起工作吗?记忆呢?