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.