【问题标题】:How to manage large initial application data in Symfony 2如何在 Symfony 2 中管理大型初始应用程序数据
【发布时间】:2013-07-17 13:37:12
【问题描述】:

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

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

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

还有更好的选择吗?

【问题讨论】:

  • 你的意思是你真的必须把所有这些行都保存在内存中?
  • Doctrine 固定装置确实是要走的路。所有这些数据来自哪里?
  • 这是我的应用程序的初始数据集。它不是测试/夹具数据。所有开发应用程序的开发人员都需要这些数据(每个人都有自己的数据库),当应用程序进入暂存或生产阶段时,这些数据也需要存在。
  • 创建数据库转储并存储可能更简单?
  • @forgottenbas 我们试过了。它不支持架构更改。我们已经使用 Doctrine Migrations 进行架构更改。

标签: php symfony doctrine-orm fixtures


【解决方案1】:

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

您只需编写夹具类来解析数据文件,将数据设置在新实体上,并保留实体。

例如,如果数据存储在 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();
    }

}

【讨论】:

  • 如果yml格式正确,你也可以使用alice:github.com/nelmio/alice
  • 是否可以做类似的事情来从同一个文件中导入多个相关实体?
  • @oflannabhra 是的,你可以这样做。您也可以为每个实体使用单独的夹具和数据文件。如果您有相关实体,请查看文档的 Sharing Objects between Fixtures 部分
  • 我也有同样的问题。您将如何加载 100K 行的数据,然后在其他实体中引用这些数据。您认为它将与夹具方法 addReference 一起使用吗?内存呢?
猜你喜欢
  • 2014-07-05
  • 2010-11-17
  • 2017-06-19
  • 2017-12-20
  • 2019-05-21
  • 1970-01-01
  • 1970-01-01
  • 2020-08-17
  • 2017-11-03
相关资源
最近更新 更多