我正在開發一個需要相當多初始數據的Symfony 2應用程序。幾千行很容易。管理這個數據集的好方法是什麼?如何在Symfony 2中管理較大的初始應用程序數據
我一直在嘗試Docrine Migrations,但它有點痛苦。數據加載一次,無法重新加載。如果數據中存在錯誤,則需要進行另一次遷移才能找到並更正它,等等。
我也一直在閱讀主義的燈具。這看起來更像我所需要的,但它需要我編寫將所有數據創建爲實體的PHP代碼。有數千個參賽作品,這將是一大痛苦。
有沒有更好的選擇?
我正在開發一個需要相當多初始數據的Symfony 2應用程序。幾千行很容易。管理這個數據集的好方法是什麼?如何在Symfony 2中管理較大的初始應用程序數據
我一直在嘗試Docrine Migrations,但它有點痛苦。數據加載一次,無法重新加載。如果數據中存在錯誤,則需要進行另一次遷移才能找到並更正它,等等。
我也一直在閱讀主義的燈具。這看起來更像我所需要的,但它需要我編寫將所有數據創建爲實體的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();
}
}
如果yml的格式正確,您也可以使用alice:https://github.com/nelmio/alice – Florian
是否可以執行類似的操作來從同一文件導入多個相關實體? – oflannabhra
@oflannabhra是的,你可以做到這一點。您也可以爲每個實體使用單獨的燈具和數據文件。如果您有相關實體,請查看文檔中的[共享對象之間的對象](http://symfony.com/doc/current/bundles/DoctrineFixturesBundle/index.html#sharing-objects-between-fixtures)部分 – kunal
你的意思是你真的有從字面上內存中的所有的行? –
主義裝置真的是要走的路。所有這些數據來自哪裏? – cheesemacfly
這是我的應用程序的初始數據集。這不是測試/夾具數據。所有開發應用程序的開發人員都需要這些數據(每個人都有自己的數據庫),而當應用程序進入分期或生產階段時,這些數據也需要存在。 –