nano composer.json
agregar debajo de "require":
"doctrine/doctrine-fixtures-bundle": "dev-master"
actualizar las librerías:
php composer.phar update
registrar el bundle en AppKernel.php
nano nano app/AppKernel.php
agregando la línea
new Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle(),
debajo de $bundles = array(
Crear la clase abstracta que leerá y parseará los fixtures en formato YAML
namespace Petramas\MainBundle\DataFixtures\ORM; use Doctrine\Common\DataFixtures\AbstractFixture; use Symfony\Component\DependencyInjection\ContainerAwareInterface; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\Yaml\Yaml; abstract class LoadPetramasData extends AbstractFixture implements ContainerAwareInterface { /** * Return the file for the current model. */ abstract function getModelFile(); /** * @var Symfony\Component\DependencyInjection\ContainerInterface */ private $container; /** * Make the sc available to our loader. * * @param ContainerInterface $container */ public function setContainer(ContainerInterface $container = null) { $this->container = $container; } /** * Return the fixtures for the current model. * * @return Array */ public function getModelFixtures() { $fixturesPath = realpath(dirname(__FILE__). '/../fixtures'); $fixtures = Yaml::parse(file_get_contents($fixturesPath . '/' . $this->getModelFile() . '.yml')); return $fixtures; } }
Crear una clase que persista la data leída por la clase anterior, debe crearse una por cada entidad que va a conter datos de inicio o fixtures
namespace Petramas\MainBundle\DataFixtures\ORM; use Doctrine\Common\DataFixtures\OrderedFixtureInterface; use Doctrine\Common\Persistence\ObjectManager; use Petramas\MainBundle\DataFixtures\ORM\LoadPetramasData; use Petramas\MainBundle\Entity\Cliente as Cliente; class LoadClienteData extends LoadPetramasData implements OrderedFixtureInterface { /** * Main load function. * * @param Doctrine\Common\Persistence\ObjectManager $manager */ function load(ObjectManager $manager) { $clientes = $this->getModelFixtures(); // Now iterate thought all fixtures foreach ($clientes['Cliente'] as $reference => $columns) { $cliente = new Cliente(); $cliente->setEstado($manager->merge($this->getReference('Estado_' . $columns['estado']))); $cliente->setRazonSocial($columns['razon_social']); $cliente->setRuc($columns['ruc']); $cliente->setDireccion($columns['direccion']); $manager->persist($cliente); // Add a reference to be able to use this object in others entities loaders $this->addReference('Cliente_'. $reference, $cliente); } $manager->flush(); } /** * The main fixtures file for this loader. */ public function getModelFile() { return 'clientes'; } /** * The order in which these fixtures will be loaded. */ public function getOrder() { return 1; } }
Crear los datos de inicio en formato YAML, nuevamente, un archivo YAML por entidad a alojar fixtures.
Cliente: valle: estado: activo razon_social: Valle Distribuciones S.A.C. ruc: 10123456789 direccion: Av. Valle 124 indurama: estado: activo razon_social: Indurama Seguros S.A. ruc: 451235052 direccion: Calle. Los Nísperos 864 famucha: estado: activo razon_social: La Real Famucha E.I.R.L. ruc: 407526379 direccion: Jirón Noche Buena 2413 Interior 25 A
Ejecutar el comando para truncar todos los registros de las entidades a aplicar fixtures y leerlos de los archivos YAML.
php app/console doctrine:fixtures:load
No hay comentarios.:
Publicar un comentario
Puedes comentar como te gustaría que comenten de ti.