Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
November 29, 2022 09:08 pm GMT

ORM Eloquent: Factory

Quando vamos realizar testes na aplicao, persistimos alguns registros para validaes mais simples, tarefa rdua pois precisamos simular dados fictcios para inserir na aplicao.

H servios on-line onde podemos baixar esses dados em formato json, mas mesmo esses facilitadores apresentam limitaes no schema, resultando em mais trabalho para adequar o schema ao contexto do projeto.

Felizmente, o ORM Eloquent disponvel no Laravel possui uma classe com mtodos para gerao de diversos tipos de dados fictcios, onde a grande vantagem poder utilizar os modelos da prpria aplicao para persistir as informaes.

Estou me referindo classe abstrata Illuminate\Database\Eloquent\Factories\Factory.

Ao longo deste artigo vou mostrar alguns mtodos para criao de informaes fictcias para cada modelo. No haver interao com a camada de persistncia e todo o contedo deste artigo pode ser encontrado na documentao oficial aqui.

recomendvel conhecimento prvio sobre Laravel.

Contedo

Este artigo est organizado de forma a facilitar a busca por informaes. Se voc quiser mais detalhes acerca do funcionamento da classe Factory, sugiro ler os itens 1 e 2.

Mas se voc est buscando saber como gerar tipos especficos, ento seu destino est entre os itens 3 e 8.

Boa leitura.

  1. Por onde comear
  2. Gerando informaes fictcias
  3. Dados pessoais
  4. Endereo
  5. Texto
  6. Nmeros
  7. Data e hora
  8. Outros

Por onde comear

A maneira mais prtica de criar uma classe que estenda de \Eloquent\Factories\Factory atravs do Artisan. Utilizando qualquer terminal, acesse o diretrio raiz da aplicao e digite o seguinte comando:

php artisan make:factory <nome_da_factory>

Assim que o comando for executado um novo arquivo ser criado no no diretrio \database\factories\ com o contedo mostrado logo a seguir:

<?phpnamespace Database\Factories;use Illuminate\Database\Eloquent\Factories\Factory;/** * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Model> */class SampleFactory extends Factory{    /**     * Define the model's default state.     *     * @return array<string, mixed>     */    public function definition()    {        return [            //        ];    }}

A classe que acabamos de criar possui apenas um mtodo, chamado definition onde toda mgica acontece e como podemos ver na assinatura desse mtodo o retorno um array de string/valor, ou algo como 'propriedade' => 'valor'.

Embora a declarao do mtodo indique que ele retornar o estado padro do modelo esta classe totalmente desacoplada do modelo (Illuminate\Database\Eloquent\Model) dentro de aplicaes Laravel.

H duas formas de retornarmos informaes para o mtodo definition. A primeira utilizar a propriedade protegida faker que extende de abastrata Eloquent\Factories\Factory ou atravs do helper fake().

A principal diferena que no helper fake() podemos passar o dialeto ($locale) para gerao das informaes, aumentando a assertividade dos dados.

Abaixo est a assinatura do mtodo fake().

/** * Get a faker instance. * * @param  ?string  $locale * @return \Faker\Generator */function fake($locale = null)

Gerando informaes fictcias

Para o mesmo tipo de dado o mtodo fake() disponibiliza, quando disponvel, duas formas de gerar informaes.

A primeira consultando diretamente uma propriedade.
Por exemplo, para criar nomes fictcios utilizamos o seguinte cdigo:

fake()->name

E a segunda chamando um mtodo que retorna o nome, tambm fictcio, conforme o cdigo abaixo:

fake()->name()

A vantagem no mtodo name() a existncia do argumento opcional $gender que define o gnero do nome a ser criado.

A seguir vou listar vrios tipos de dados que podem ser gerados, agrupando-os em categorias para facilitar a busca e utilizao.

Dados pessoais

Este grupo de mtodos retorna diversas informaes pessoais, de nomes a nmeros de telefone. A tabela a seguir traz o nome da propriedade e qual retorno fornecido.

PropriedadeRetorno
fake()->namenome completo
fake()->lastNamesobrenome
fake()->firstNameMaleprimeiro nome masculino
fake()->firstNameFemaleprimeiro nome feminino
fake()->jobtitlettulo (profisso)
fake()->phoneNumbernmero de telefone

Endereo

Esta categoria traz opes diversas opes para endereo como podemos ver na tabela a seguir.

PropriedadeRetorno
fake()->addressendereo completo
fake()->streetAddresslogradouro com nmero
fake()->streetNamesomente logradouro
fake()->buildingNumbernmero do prdio
fake()->citycidade
fake()->countrypas
fake()->postcodeCEP

Texto

"...Lorem ipsum em design grfico e editorao um texto padro em latim utilizado na produo grfica para preencher os espaos de texto em publicaes...". Fonte: Wikipedia.

Esta categoria possibilita a gerao de palavras nicas at pargrafos completos.

Mas, diferentemente das categorias anteriores onde os retornos so sempre strings, algumas propriedades desta categoria retornam array de strings.

Este comportamento pode ser evitado utilizando o mtodo correspondente no lugar da propriedade.

Por exemplo, a propriedade fake()->words retornar um array com 3 strings diferentes, ao passo que o mtodo fake()-words(3, true) tambm retornar 3 palavras mas em uma nica string.

A tabela a seguir traz as propriedades com seus respectivos retornos e para cada propriedade h um mtodo correspondente.

PropriedadeRetorno
fake()->randomLetteruma letra
fake()->worduma nica palavra
fake()->wordsarray com 3 palavras
fake()->sentenceuma frase com at 6 palavras
fake()->sentencesarray com 3 frases
fake()->paragraphpargrafo com 3 frases
fake()->paragraphsarray com 3 pargrafos
fake()->texttexto com at 200 palavras

Nmeros

Este grupo destina-se a gerao de nmeros fictcios, sejam inteiros ou reais. Vamos tabela com os mtodos e os respectivos retornos.

Suprimi o fake()-> para melhorar a visualizao da tabela.

MtodoRetorno
numberBetween($int1 = 0, $int2 = 2147483647)inteiro entre $int1 e $int2
randomDigit()inteiro entre 0 e 9
randomDigitNot($except)inteiro entre 0 e 9, exceto $except
randomDigitNotZero()inteiro entre 1 e 9
randomFloat($nbMaxDecimals = null, $min = 0, $max = null)nmero real com $nbMaxDecimals casas decimais, maior ou igual a $min e menor ou igual a $max

Data e hora

Esta categoria retorna informaes de data e hora, fictcios.

PropriedadeRetorno
fake()->dateTimedata e hora, at a atual
fake()->datedata no formato 'Y-m-d', at a atual
fake()->timehora no formato 'H:i:s', at a atual
fake()->dateTimeThisCenturydata e hora do sculo corrente
fake()->dateTimeThisDecadedata e hora da dcada corrente
fake()->dateTimeThisYeardata e hora do ano corrente
fake()->dateTimeThisMonthdata e hora do ms corrente
fake()->dayOfMonthdia do ms
fake()->dayOfWeekdia da semana
fake()->monthms (numeral)
fake()->monthNamems (extenso)
fake()->yearano
fake()->centurysculo

Outros

Esta categoria traz propriedades bastante diversas e por isso, vou listar somente algumas.

PropriedadeRetorno
fake()->hexColorcor em hexadecimal
fake()->rgbColorcor em RGB
fake()->rgbCssColorcor RGB em CSS
fake()->colorNamenome da cor
fake()->userNamenome de usurio
fake()->passwordsenha de 6 a 20 caracteres
fake()->domainNamenome de domnio
fake()->urlurl
fake()->ipv4endereo de rede IPV4
fake()->ipv6endereo de rede IPV6
fake()->macAddressendereo "mac" de placa de rede

Muita coisa no mesmo?!

Espero ter ajudado.

At breve.


Original Link: https://dev.to/marciopolicarpo/orm-eloquent-factory-2nk8

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To