2013-07-17 88 views
3

我正在開發一個需要相當多初始數據的Symfony 2應用程序。幾千行很容易。管理這個數據集的好方法是什麼?如何在Symfony 2中管理較大的初始應用程序數據

我一直在嘗試Docrine Migrations,但它有點痛苦。數據加載一次,無法重新加載。如果數據中存在錯誤,則需要進行另一次遷移才能找到並更正它,等等。

我也一直在閱讀主義的燈具。這看起來更像我所需要的,但它需要我編寫將所有數據創建爲實體的PHP代碼。有數千個參賽作品,這將是一大痛苦。

有沒有更好的選擇?

+0

你的意思是你真的有從字面上內存中的所有的行? –

+0

主義裝置真的是要走的路。所有這些數據來自哪裏? – cheesemacfly

+0

這是我的應用程序的初始數據集。這不是測試/夾具數據。所有開發應用程序的開發人員都需要這些數據(每個人都有自己的數據庫),而當應用程序進入分期或生產階段時,這些數據也需要存在。 –

回答

2

如果數據存儲在文件中,則可以使用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(); 
    } 

} 
+0

如果yml的格式正確,您也可以使用alice:https://github.com/nelmio/alice – Florian

+0

是否可以執行類似的操作來從同一文件導入多個相關實體? – oflannabhra

+0

@oflannabhra是的,你可以做到這一點。您也可以爲每個實體使用單獨的燈具和數據文件。如果您有相關實體,請查看文檔中的[共享對象之間的對象](http://symfony.com/doc/current/bundles/DoctrineFixturesBundle/index.html#sharing-objects-between-fixtures)部分 – kunal

相關問題