我正在开发一个需要大量初始数据的 Symfony 2 应用程序。几千行很容易。管理这个数据集的好方法是什么?
我一直在尝试Docrine Migrations,但这有点痛苦。数据只加载一次,不能重新加载。如果数据中存在错误,您需要另一个迁移来查找和更正它,等等。
我也一直在阅读 Doctrine Fixtures。这看起来更像我需要的,但它需要我编写 PHP 代码,将我的所有数据创建为实体。有几千个条目,这将是一个主要的痛苦。
有更好的选择吗?
我正在开发一个需要大量初始数据的 Symfony 2 应用程序。几千行很容易。管理这个数据集的好方法是什么?
我一直在尝试Docrine Migrations,但这有点痛苦。数据只加载一次,不能重新加载。如果数据中存在错误,您需要另一个迁移来查找和更正它,等等。
我也一直在阅读 Doctrine Fixtures。这看起来更像我需要的,但它需要我编写 PHP 代码,将我的所有数据创建为实体。有几千个条目,这将是一个主要的痛苦。
有更好的选择吗?
如果数据存储在文件中,您可以使用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();
}
}