Cookie Consent by Free Privacy Policy Generator 📌 ORM Eloquent: Factory

🏠 Team IT Security News

TSecurity.de ist eine Online-Plattform, die sich auf die Bereitstellung von Informationen,alle 15 Minuten neuste Nachrichten, Bildungsressourcen und Dienstleistungen rund um das Thema IT-Sicherheit spezialisiert hat.
Ob es sich um aktuelle Nachrichten, Fachartikel, Blogbeiträge, Webinare, Tutorials, oder Tipps & Tricks handelt, TSecurity.de bietet seinen Nutzern einen umfassenden Überblick über die wichtigsten Aspekte der IT-Sicherheit in einer sich ständig verändernden digitalen Welt.

16.12.2023 - TIP: Wer den Cookie Consent Banner akzeptiert, kann z.B. von Englisch nach Deutsch übersetzen, erst Englisch auswählen dann wieder Deutsch!

Google Android Playstore Download Button für Team IT Security



📚 ORM Eloquent: Factory


💡 Newskategorie: Programmierung
🔗 Quelle: dev.to

Quando vamos realizar testes na aplicação, persistimos alguns registros para validações mais simples, tarefa árdua pois precisamos simular dados fictícios para inserir na aplicação.

Há serviços on-line onde podemos baixar esses dados em formato json, mas mesmo esses facilitadores apresentam limitações no schema, resultando em mais trabalho para adequar o schema ao contexto do projeto.

Felizmente, o ORM Eloquent disponível no Laravel possui uma classe com métodos para geração de diversos tipos de dados fictícios, onde a grande vantagem é poder utilizar os modelos da própria aplicação para persistir as informações.

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

Ao longo deste artigo vou mostrar alguns métodos para criação de informações fictícias para cada modelo. Não haverá interação com a camada de persistência e todo o conteúdo deste artigo pode ser encontrado na documentação oficial aqui.

⚠️ É recomendável conhecimento prévio sobre Laravel.

Conteúdo

Este artigo está organizado de forma a facilitar a busca por informações. 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 específicos, então seu destino está entre os itens 3 e 8.

Boa leitura. 😄

  1. Por onde começar
  2. Gerando informações fictícias
  3. Dados pessoais
  4. Endereço
  5. Texto
  6. Números
  7. Data e hora
  8. Outros

Por onde começar

A maneira mais prática de criar uma classe que estenda de \Eloquent\Factories\Factory é através do Artisan. Utilizando qualquer terminal, acesse o diretório raiz da aplicação 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 diretório \database\factories\ com o conteúdo mostrado logo a seguir:

<?php

namespace 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 método, chamado definition onde toda mágica acontece e como podemos ver na assinatura desse método o retorno é um array de string/valor, ou algo como 'propriedade' => 'valor'.

Embora a declaração do método indique que ele retornará o estado padrão do modelo esta classe é totalmente desacoplada do modelo (Illuminate\Database\Eloquent\Model) dentro de aplicações Laravel.

Há duas formas de retornarmos informações para o método definition. A primeira é utilizar a propriedade protegida faker que extende de abastrata Eloquent\Factories\Factory ou através do helper fake().

A principal diferença é que no helper fake() podemos passar o dialeto ($locale) para geração das informações, aumentando a assertividade dos dados.

Abaixo está a assinatura do método fake().

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

Gerando informações fictícias

Para o mesmo tipo de dado o método fake() disponibiliza, quando disponível, duas formas de gerar informações.

A primeira é consultando diretamente uma propriedade.
Por exemplo, para criar nomes fictícios utilizamos o seguinte código:

fake()->name

E a segunda é chamando um método que retorna o nome, também fictício, conforme o código abaixo:

fake()->name()

A vantagem é no método name() é a existência do argumento opcional $gender que define o gênero do nome a ser criado.

A seguir vou listar vários tipos de dados que podem ser gerados, agrupando-os em categorias para facilitar a busca e utilização.

Dados pessoais

Este grupo de métodos retorna diversas informações pessoais, de nomes a números de telefone. A tabela a seguir traz o nome da propriedade e qual retorno fornecido.

Propriedade Retorno
fake()->name nome completo
fake()->lastName sobrenome
fake()->firstNameMale primeiro nome masculino
fake()->firstNameFemale primeiro nome feminino
fake()->jobtitle título (profissão)
fake()->phoneNumber número de telefone

Endereço

Esta categoria traz opções diversas opções para endereço como podemos ver na tabela a seguir.

Propriedade Retorno
fake()->address endereço completo
fake()->streetAddress logradouro com número
fake()->streetName somente logradouro
fake()->buildingNumber número do prédio
fake()->city cidade
fake()->country país
fake()->postcode CEP

Texto

"...Lorem ipsum em design gráfico e editoração é um texto padrão em latim utilizado na produção gráfica para preencher os espaços de texto em publicações...". Fonte: Wikipedia.

Esta categoria possibilita a geração de palavras únicas até parágrafos completos.

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

Este comportamento pode ser evitado utilizando o método correspondente no lugar da propriedade.

Por exemplo, a propriedade fake()->words retornará um array com 3 strings diferentes, ao passo que o método fake()-words(3, true) também 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 método correspondente.

Propriedade Retorno
fake()->randomLetter uma letra
fake()->word uma única palavra
fake()->words array com 3 palavras
fake()->sentence uma frase com até 6 palavras
fake()->sentences array com 3 frases
fake()->paragraph parágrafo com 3 frases
fake()->paragraphs array com 3 parágrafos
fake()->text texto com até 200 palavras

Números

Este grupo destina-se a geração de números fictícios, sejam inteiros ou reais. Vamos à tabela com os métodos e os respectivos retornos.

⚠️ Suprimi o fake()-> para melhorar a visualização da tabela.

Método Retorno
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) número real com $nbMaxDecimals casas decimais, maior ou igual a $min e menor ou igual a $max

Data e hora

Esta categoria retorna informações de data e hora, fictícios.

Propriedade Retorno
fake()->dateTime data e hora, até a atual
fake()->date data no formato 'Y-m-d', até a atual
fake()->time hora no formato 'H:i:s', até a atual
fake()->dateTimeThisCentury data e hora do século corrente
fake()->dateTimeThisDecade data e hora da década corrente
fake()->dateTimeThisYear data e hora do ano corrente
fake()->dateTimeThisMonth data e hora do mês corrente
fake()->dayOfMonth dia do mês
fake()->dayOfWeek dia da semana
fake()->month mês (numeral)
fake()->monthName mês (extenso)
fake()->year ano
fake()->century século

Outros

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

Propriedade Retorno
fake()->hexColor cor em hexadecimal
fake()->rgbColor cor em RGB
fake()->rgbCssColor cor RGB em CSS
fake()->colorName nome da cor
fake()->userName nome de usuário
fake()->password senha de 6 a 20 caracteres
fake()->domainName nome de domínio
fake()->url url
fake()->ipv4 endereço de rede IPV4
fake()->ipv6 endereço de rede IPV6
fake()->macAddress endereço "mac" de placa de rede

Muita coisa não é mesmo?!

Espero ter ajudado.

Até breve. 😎

...



📌 ORM Eloquent: Factory


📈 67.86 Punkte

📌 ORM vs No ORM: Which to Choose?


📈 50.6 Punkte

📌 ORM vs No ORM: ¿Cuál Elegir?


📈 50.6 Punkte

📌 ROS 2 Eloquent Elusor call for testing and package releases


📈 30.64 Punkte

📌 David Attenborough Addresses Climate Change in Most Eloquent Way Possible


📈 30.64 Punkte

📌 Book Club: Eloquent JavaScript. 4 Programme Structure and Functions


📈 30.64 Punkte

📌 Using the booted Method in Laravel Eloquent Models for CRUD Event Listening and Cache Resetting


📈 30.64 Punkte

📌 Dealing with Enum in a Symfony App with Doctrine2 as ORM


📈 25.3 Punkte

📌 Tortoise ORM up to 0.15.22/0.16.5 Mass Update sql injection


📈 25.3 Punkte

📌 Introduction to Database transaction, Read phenomenom and isolation level using Sequelize ORM


📈 25.3 Punkte

📌 Understanding SQLAlchemy ORM and SQLAlchemy Core


📈 25.3 Punkte

📌 ORM, Prisma, and How You Should Build Your Next Backend Database Project


📈 25.3 Punkte

📌 Observable Flutter: Prisma ORM


📈 25.3 Punkte

📌 Making DynamoDB Access Easy in NodeJS with ORM


📈 25.3 Punkte

📌 Dealing with Enum in a Symfony App with Doctrine2 as ORM


📈 25.3 Punkte

📌 Persistenz in Java: Neues seit Hibernate ORM 6


📈 25.3 Punkte

📌 Persistenz in Java: Neues seit Hibernate ORM 6


📈 25.3 Punkte

📌 Drizzle ORM in 100 Seconds


📈 25.3 Punkte

📌 Setup MongoDB replica set locally in docker or with Atlas for Prisma ORM


📈 25.3 Punkte

📌 Django ORM Kullanımı Üzerine Temel Bilgiler


📈 25.3 Punkte

📌 Factory Pattern: Alle Informationen zum Factory Method Pattern


📈 23.84 Punkte

📌 [Bypass antivirus] Patching binary using Backdoor Factory on Kali Linux 2 0


📈 11.92 Punkte

📌 Erste europäische Bug-Prämien-Plattform „Bounty Factory“ gestartet


📈 11.92 Punkte

📌 Windows 10 Mobile: Verlassen des Insider Program zukünftig ohne Factory Reset


📈 11.92 Punkte

📌 Format Factory v2.95 - Buffer Overflow Vulnerabilities


📈 11.92 Punkte

📌 Format Factory - Multiple Buffer Overflow Vulnerabilities


📈 11.92 Punkte

📌 Nexus Security Bulletin: Neue Factory Images von Google mit Sicherheitsupdates


📈 11.92 Punkte

📌 Android: März-Sicherheitspatch ist da, Factory Images für Nexus-Serie


📈 11.92 Punkte

📌 Format Factory 3.9.0.0


📈 11.92 Punkte

📌 Android Security Bulletin: Sicherheitsupdates & Factory Images für Nexus-Geräte


📈 11.92 Punkte

📌 No Password Required! 135 Million Modems Open to Remote Factory Reset


📈 11.92 Punkte

📌 Format Factory - Umfangreicher Dateikonverter


📈 11.92 Punkte

📌 BMWi-Studie IT-Sicherheit für Industrie 4.0 : Die „Smart Factory“ bringt neue Sicherheitslücken


📈 11.92 Punkte

📌 The Backdoor Factory (BDF) – Patch Binaries With Shellcode


📈 11.92 Punkte











matomo