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

标签 php symfony doctrine-orm fixtures

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

我一直在尝试 Docrine Migrations,但这有点痛苦。数据加载一次,您无法重新加载。如果数据中存在错误,您需要进行另一次迁移才能找到并更正错误,等等。

我也一直在阅读 Doctrine Fixtures。这看起来更像我需要的,但它需要我编写 PHP 代码来将我的所有数据创建为实体。有数千个条目,这将是一个很大的痛苦。

有更好的选择吗?

最佳答案

如果数据存储在文件中,可以使用Doctrine Data Fixtures从该文件导入数据。

您只需编写 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();
    }

}

关于php - 如何在 Symfony 2 中管理大型初始应用程序数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17701290/

相关文章:

php - 如何获取 Input::all() 中的数组数据并将其存储为与实际记录的 hasMany() 关系?

symfony - 映射 和 彼此不一致?

php - 如何使用带有 Doctrine2 扩展的 Versionable 实体?

php - Symfony2 : Undefined method: getDoctrine()

php - 如何将自定义帖子类型类别分开以发布类别

php - 发送 HTTP 响应后继续 PHP 执行

php - 如何在 YII 中创建迁移?

php - 我的自定义工厂类中的 OutOfBoundsException

php - Symfony2 删除 FormType 中的空字段

symfony - 动态删除 JMS 序列化程序事件订阅者内的实体