Trabalhando com Data Fixture no Zend Framework 3

Se você pretende utilizar Data Fixtures no seu projeto Zend na versão 3 em diante, você pode utilizar este pacote:

dkorsak/doctrine-data-fixture-module

Link do pacote no site composer:
https://packagist.org/packages/dkorsak/doctrine-data-fixture-module

(Este conteúdo fornece uma dica a mais do que esta na documentação do pacote)

Basta adicionar em seu composer.json na sessão “require” depois dar um update em seu projeto via comando

"name": "zendframework/skeleton-application",
    "description": "Skeleton Application for Zend Framework zend-mvc applications",
    "type": "project",
    "license": "BSD-3-Clause",
    "keywords": [
        "framework",
        "mvc",
        "zf"
    ],
    "homepage": "http://framework.zend.com/",
    "minimum-stability": "dev",
    "prefer-stable": true,
    "require": {
        "dkorsak/doctrine-data-fixture-module":"^1.0",

Comando via console (na pasta raiz do projeto)

php composer.phar update

Você também pode instalar via comando da seguinte forma:

php composer.phar require dkorsak/doctrine-data-fixture-module

Não esqueça é claro que os seguintes módulos já precisam estar sendo inciados:
DoctrineModule, DoctrineORMModule e DoctrineDataFixtureModule
Em /application/config/modules.config.php

Também não esqueça de configurar dentro de seu Module para apontar onde se encontra nossas Fixtures

<?php
return array(
    'doctrine' => array(
        'fixture' => array(
            'ModuleName' => __DIR__ . '/../src/ModuleName/Fixture',
        )
    )
);
?>

A biblioteca será baixada e instalada, depois para utiliza-la será via comando também, você tem as seguintes opções:
Padrão

./vendor/bin/doctrine-module orm:fixtures:load 

Trunca e sem confirmação (Passa por cima dos dados caso já tenha cadastrado, vai deletar os atuais e substituir)

./vendor/bin/doctrine-module orm:fixtures:load -n --purge-with-truncate

Adicionar dados sem deletar os anteriores

./vendor/bin/doctrine-module orm:fixtures:load -n --append

Exemplo de Fixture criada:

namespace MODVeiculo\Fixture;

use Doctrine\Common\DataFixtures\AbstractFixture;
use \Doctrine\Common\Persistence\ObjectManager;
use \Doctrine\Common\DataFixtures\OrderedFixtureInterface;

use MODVeiculo\Entity\Veiculo;

class LoadVeiculo extends AbstractFixture implements OrderedFixtureInterface{
    
    public function getOrder() {
        return 8;
    }

    public function load(ObjectManager $manager) {
        
        //1        
        $idEmpresa = $manager->getReference(\MODEmpresa\Entity\Empresa::class, 1);
        $idCliente = $manager->getReference('MODCliente\Entity\Cliente', 4);
        $idTipoVeiculo = $manager->getReference(\MODVeiculo\Entity\TipoVeiculo::class, 1);
                
        $veiculo = new Veiculo();
        $veiculo->setIdCliente($idCliente)
                ->setIdEmpresa($idEmpresa)
                ->setIdTipoVeiculo($idTipoVeiculo)
                ->setTelefone('14998453647')              
                ->setDescricao('TOA TOA 3')
                ->setIdentificacaoPlaca('CCC3333')
                ->setMonitorado(true)
                //->setImei('111222333444666')
                ->setIcone('carrinho');
        
        $manager->persist($veiculo);
        $manager->flush();
    }
}

Uma dica muito importante e interessante, se você implementar a “OrderedFixtureInterface” você obrigatoriamente vai ter que determinar a sequencia em que as fixtures serão processadas no banco, vamos supor que você tenha dependências, no caso vamos supor que você precisa vincular um cliente ao veiculo, sendo assim você precisa ter criado esse cliente antes para relacionar ele ao veículo correto? Então a nossa Fixture de clientes precisa vir antes da Fixture de Veiculos.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *