Π‘ΡΠΊΠΎΠ½ΠΎΠΌΡŒΡ‚Π΅ 15% Π½Π° всСх хостинговых услугах

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ свои Π½Π°Π²Ρ‹ΠΊΠΈ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ скидку Π½Π° любой Ρ‚Π°Ρ€ΠΈΡ„Π½Ρ‹ΠΉ ΠΏΠ»Π°Π½

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ΄: Skills ΠΠ°Ρ‡Π°Ρ‚ΡŒ
Π ΡƒΠ±Ρ€ΠΈΠΊΠΈ
Администрация

# ΠœΠ°ΡΡ‚Π΅Ρ€ΡΡ‚Π²ΠΎ рСалистичной Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² Laravel с Faker: ПолноС тСхничСскоС руководство

Faker β€” это PHP-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, которая Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ статистичСски рСалистичныС Ρ„ΠΈΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ β€” ΠΈΠΌΠ΅Π½Π°, адрСса, элСктронныС письма, Π½ΠΎΠΌΠ΅Ρ€Π° Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΎΠ², UUID ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ β€” для использования Π² Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ тСстировании, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π½Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ срСды Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π’ Laravel Faker поставляСтся ΠΊΠ°ΠΊ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°ΠΊΠ΅Ρ‚ `fakerphp/faker` ΠΈ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ интСгрируСтся с Ρ„Π°Π±Ρ€ΠΈΠΊΠ°ΠΌΠΈ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Eloquent, прСдоставляя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ структурированный, воспроизводимый способ создания Π·Π½Π°Ρ‡ΠΈΠΌΡ‹Ρ… тСстовых Π½Π°Π±ΠΎΡ€ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π±Π΅Π· обращСния ΠΊ производствСнным Π΄Π°Π½Π½Ρ‹ΠΌ.

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ ΠΎΡ‚Π²Π΅Ρ‚ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ для поиска: Laravel Faker Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, привязывая экзСмпляр `FakerGenerator` ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ„Π°Π±Ρ€ΠΈΠΊΠ΅ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, прСдоставляя сотни Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‚Π΅Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΊΠ°ΠΊ свойства ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для получСния синтСтичСских Π΄Π°Π½Π½Ρ‹Ρ… с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ Π»ΠΎΠΊΠ°Π»ΠΈ ΠΈ типобСзопасности ΠΏΠΎ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΡŽ.

ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ трСбования

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅ с этим руководством, ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ваша срСда соотвСтствуСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ трСбованиям:

  • Laravel 8 ΠΈΠ»ΠΈ Π½ΠΎΠ²Π΅Π΅ (синтаксис Ρ„Π°Π±Ρ€ΠΈΡ‡Π½Ρ‹Ρ… классов Π·Π°ΠΌΠ΅Π½ΠΈΠ» старый ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π° основС Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠΉ Π² Laravel 8)
  • PHP 8.0 ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅ (рСкомСндуСтся для Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… свойств ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ match Π² Ρ„Π°Π±Ρ€ΠΈΠΊΠ°Ρ…)
  • ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Composer с `fakerphp/faker` Π² `require-dev`
  • НастроСнноС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… (`DB_CONNECTION`, `DB_DATABASE` ΠΈ Ρ‚.Π΄.) Π² `.env`
  • Π‘Π°Π·ΠΎΠ²ΠΎΠ΅ знакомство с модСлями Eloquent ΠΈ Artisan CLI

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Faker Π½Π° самом Π΄Π΅Π»Π΅ β€” ΠΈ Ρ‡Π΅ΠΌ ΠΎΠ½ Π½Π΅ являСтся

Faker β€” это Π½Π΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ случайных чисСл. Π­Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π΄Π²ΠΈΠΆΠΎΠΊ синтСза Π΄Π°Π½Π½Ρ‹Ρ…. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‚Π΅Ρ€ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚ структурныС ΠΏΡ€Π°Π²ΠΈΠ»Π° своСй ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области: адрСса элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹ содСрТат Ρ€ΠΎΠ²Π½ΠΎ ΠΎΠ΄ΠΈΠ½ `@`, Π½ΠΎΠΌΠ΅Ρ€Π° Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΎΠ² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°ΠΌ Π½Π°Π±ΠΎΡ€Π°, Π° Π½ΠΎΠΌΠ΅Ρ€Π° ΠΊΡ€Π΅Π΄ΠΈΡ‚Π½Ρ‹Ρ… ΠΊΠ°Ρ€Ρ‚ проходят ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ Π›ΡƒΠ½Π°. Π­Ρ‚ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ Π²Π°ΠΆΠ½ΠΎ ΠΏΡ€ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΌ тСстировании β€” чисто случайная строка Π½Π΅ ΠΏΡ€ΠΎΠΉΠ΄Ρ‘Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ достигнСт вашСй бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ.

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° поставляСтся с Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ 180 встроСнными Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‚Π΅Ρ€Π°ΠΌΠΈ, ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ Π² классы ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ²:

  • `Person` β€” ΠΈΠΌΠ΅Π½Π°, Ρ‚ΠΈΡ‚ΡƒΠ»Ρ‹, ΠΏΠΎΠ»
  • `Internet` β€” элСктронныС письма, URL, IP-адрСса, MAC-адрСса, слаги
  • `Address` β€” ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Π΅ адрСса, Π³ΠΎΡ€ΠΎΠ΄Π°, ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Π΅ индСксы, страны, ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹
  • `PhoneNumber` β€” Π½ΠΎΠΌΠ΅Ρ€Π° Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ E.164 Π² соотвСтствии с локалью
  • `Lorem` β€” Π°Π±Π·Π°Ρ†Ρ‹, прСдлоТСния, слова
  • `DateTime` β€” Π΄Π°Ρ‚Ρ‹, врСмя, Unix-Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΊΠΈ, строки ISO 8601
  • `Payment` β€” Π½ΠΎΠΌΠ΅Ρ€Π° ΠΊΡ€Π΅Π΄ΠΈΡ‚Π½Ρ‹Ρ… ΠΊΠ°Ρ€Ρ‚, сроки дСйствия, IBAN
  • `Miscellaneous` β€” Π±ΡƒΠ»Π΅Π²Ρ‹ значСния, Ρ…ΡΡˆΠΈ MD5/SHA1/SHA256, UUID, Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Ρ„Π°ΠΉΠ»ΠΎΠ²

ПониманиС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ класс ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π° ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Ρ‚ΠΎΡ‚ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‚Π΅Ρ€, ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ ошибки `BadMethodCallException` β€” Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространённая Π»ΠΎΠ²ΡƒΡˆΠΊΠ° Faker для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ.

Как Laravel ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Faker с Ρ„Π°Π±Ρ€ΠΈΠΊΠ°ΠΌΠΈ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ

Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ класс `IlluminateDatabaseEloquentFactoriesFactory` Laravel ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ экзСмпляр `FakerGenerator` ΠΈΠ· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈ присваиваСт Π΅Π³ΠΎ `$this->faker`. Π›ΠΎΠΊΠ°Π»ΡŒ управляСтся ΠΊΠ»ΡŽΡ‡ΠΎΠΌ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ `app.faker_locale` (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ `en_US`). Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ всС Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ Π² вашСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ΄Π½Ρƒ настройку Π»ΠΎΠΊΠ°Π»ΠΈ, Ссли Π²Ρ‹ явно Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ Π΅Ρ‘ β€” Π΄Π΅Ρ‚Π°Π»ΡŒ, которая создаёт ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ, Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ многоязычныС прилоТСния.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ

β€œ`bash

php artisan make:factory UserFactory –model=User

β€œ`

Π­Ρ‚ΠΎ создаёт `database/factories/UserFactory.php`. Π€Π»Π°Π³ `–model` автоматичСски ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ свойство `$model`, избавляя вас ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ рСдактирования.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ с Faker

β€œ`php

<?php

namespace DatabaseFactories;

use AppModelsUser;

use IlluminateDatabaseEloquentFactoriesFactory;

use IlluminateSupportStr;

class UserFactory extends Factory

{

protected $model = User::class;

public function definition(): array

{

return [

'name' => $this->faker->name(),

'email' => $this->faker->unique()->safeEmail(),

'email_verified_at' => now(),

'password' => bcrypt('password'),

'remember_token' => Str::random(10),

];

}

}

β€œ`

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ этого опрСдСлСния:

  • `unique()` β€” это ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Π° Π½Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‚Π΅Ρ€. Он ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅Ρ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈ выбрасываСт `OverflowException` послС 10 000 ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ β€” Π²Π°ΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΡ‡Π΅Π½ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π½Π°Π±ΠΎΡ€ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠ»Π΅ΠΌ Π½ΠΈΠ·ΠΊΠΎΠΉ ΠΊΠ°Ρ€Π΄ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.
  • `safeEmail()` Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ адрСса, Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ΡΡ Π½Π° `example.com`, `example.net` ΠΈΠ»ΠΈ `example.org` β€” Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π΄ΠΎΠΌΠ΅Π½Ρ‹ RFC 2606, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ доставят Ρ€Π΅Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΡ‡Ρ‚Ρƒ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ это Π² CI-ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°Ρ… для прСдотвращСния случайной исходящСй элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹.
  • `bcrypt('password')` Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ Тёстко Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½. Π₯ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ 50 000 ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ Π²ΠΎ врСмя заполнСния заняло Π±Ρ‹ ΠΌΠΈΠ½ΡƒΡ‚Ρ‹; Π΅Π΄ΠΈΠ½Ρ‹ΠΉ ΠΎΠ±Ρ‰ΠΈΠΉ Ρ…ΡΡˆ ускоряСт Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, ΠΎΡΡ‚Π°Π²Π°ΡΡΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ для тСстов Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ.

Бинтаксис свойств ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²

Π€ΠΎΡ€ΠΌΠ°Ρ‚Ρ‚Π΅Ρ€Ρ‹ Faker Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΊΠ°ΠΊ магичСскиС свойства (`$this->faker->name`), Ρ‚Π°ΠΊ ΠΈ явныС Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² (`$this->faker->name()`). Бинтаксис ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»Π΅Π½ Π² соврСмСнных ΠΊΠΎΠ΄ΠΎΠ²Ρ‹Ρ… Π±Π°Π·Π°Ρ…, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ ΡƒΠ΄ΠΎΠ±Π΅Π½ для IDE, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈ ΠΈΠ·Π±Π΅Π³Π°Π΅Ρ‚ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹ с Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ свойствами класса.

ИспользованиС Faker Π² сидСрах Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

Π€Π°Π±Ρ€ΠΈΠΊΠΈ становятся ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ Π² ΠΌΠ°ΡΡˆΡ‚Π°Π±Π΅ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΈΠ· сидСров. Π‘ΠΈΠ΄Π΅Ρ€ β€” это ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ оркСстрации; Ρ„Π°Π±Ρ€ΠΈΠΊΠ° β€” ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ спСцификации Π΄Π°Π½Π½Ρ‹Ρ…. Π”Π΅Ρ€ΠΆΠΈΡ‚Π΅ ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½ΠΎ.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ сидСра

β€œ`bash

php artisan make:seeder UserSeeder

β€œ`

β€œ`php

<?php

namespace DatabaseSeeders;

use AppModelsUser;

use IlluminateDatabaseSeeder;

class UserSeeder extends Seeder

{

public function run(): void

{

User::factory()->count(50)->create();

}

}

β€œ`

Запуск сидСров

β€œ`bash

Run a specific seeder class

php artisan db:seed –class=UserSeeder

Run all seeders registered in DatabaseSeeder

php artisan db:seed

Wipe and re-seed in one command (destructive β€” never use on production)

php artisan migrate:fresh –seed

β€œ`

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ ΠΎ бСзопасности Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅: ВсСгда Π·Π°Ρ‰ΠΈΡ‰Π°ΠΉΡ‚Π΅ сидСры ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ окруТСния, Ссли ΠΎΠ½ΠΈ зарСгистрированы Π² `DatabaseSeeder`. Распространённый шаблон:

β€œ`php

if (app()->environment('local', 'staging')) {

$this->call(UserSeeder::class);

}

β€œ`

ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ Faker

1. Бостояния Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ

Бостояния ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π±Π΅Π· дублирования всСго массива `definition()`. Они ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ частичноС ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ²Π΅Ρ€Ρ… Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ опрСдСлСния.

β€œ`php

public function admin(): static

{

return $this->state(fn (array $attributes) => [

'is_admin' => true,

'role' => 'administrator',

]);

}

public function unverified(): static

{

return $this->state(fn (array $attributes) => [

'email_verified_at' => null,

]);

}

β€œ`

Бостояния ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ:

β€œ`php

User::factory()->admin()->unverified()->count(5)->create();

β€œ`

Π­Ρ‚ΠΎ создаёт 5 ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ-администраторов, Ρ‡ΡŒΠΈ элСктронныС адрСса Π½Π΅ Π±Ρ‹Π»ΠΈ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½Ρ‹ β€” точная тСстовая фикстура, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡƒΡ‚ΠΎΠΌΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.

2. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Ρ‹ Faker

Когда встроСнныС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‚Π΅Ρ€Ρ‹ Π½Π΅ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ Π²Π°ΡˆΡƒ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π°Ρ€Ρ‚ΠΈΠΊΡƒΠ»Ρ‹ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ², Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ сотрудников ΠΈΠ»ΠΈ ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Π΅ Π΄ΠΎΠΌΠ΅Π½Ρ‹), Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€.

β€œ`php

<?php

use FakerProviderBase as BaseProvider;

class ProductProvider extends BaseProvider

{

private static array $categories = ['electronics', 'apparel', 'furniture', 'grocery'];

public function productSku(): string

{

return strtoupper($this->bothify('??-####-??'));

}

public function productCategory(): string

{

return static::randomElement(static::$categories);

}

}

β€œ`

ЗарСгистрируйтС ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ Π²Π½ΡƒΡ‚Ρ€ΠΈ конструктора вашСй Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ ΠΈΠ»ΠΈ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ boot `AppServiceProvider` для глобальной доступности:

β€œ`php

// In AppServiceProvider::boot()

app(FakerGenerator::class)->addProvider(new ProductProvider(app(FakerGenerator::class)));

β€œ`

Π—Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΅Π³ΠΎ Π³Π΄Π΅ ΡƒΠ³ΠΎΠ΄Π½ΠΎ:

β€œ`php

'sku' => $this->faker->productSku(),

'category' => $this->faker->productCategory(),

β€œ`

Π“Ρ€Π°Π½ΠΈΡ‡Π½Ρ‹ΠΉ случай: Если Π²Ρ‹ рСгистрируСтС ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ, ΠΎΠ½ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ доступСн Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„Π°Π±Ρ€ΠΈΠΊΠ°Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… Ρ‚ΠΎΡ‚ ΠΆΠ΅ синглтон `FakerGenerator`. РСгистрируйтС глобально для ΠΎΠ±Ρ‰ΠΈΡ… ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ²; локально β€” для спСцифичных для Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ.

3. ГСнСрация связанных ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ (ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ)

Π€Π°Π±Ρ€ΠΈΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ, позволяя ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ†Π΅Π»Ρ‹Π΅ Π³Ρ€Π°Ρ„Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² ΠΎΠ΄Π½ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅.

β€œ`php

// PostFactory.php

public function definition(): array

{

return [

'user_id' => User::factory(),

'title' => $this->faker->sentence(6),

'body' => $this->faker->paragraphs(3, true),

'slug' => $this->faker->unique()->slug(4),

];

}

β€œ`

Когда Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ `Post::factory()->create()`, Laravel опрСдСляСт, Ρ‡Ρ‚ΠΎ `user_id` Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ Π² Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ, ΠΈ автоматичСски сначала создаёт `User`, Π·Π°Ρ‚Π΅ΠΌ присваиваСт Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠΈΡ‚ΡŒ записи ΠΊ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ:

β€œ`php

$user = User::factory()->create();

Post::factory()->count(10)->for($user)->create();

β€œ`

ΠœΠ΅Ρ‚ΠΎΠ΄ `for()` Ρ‡ΠΈΡ‰Π΅, Ρ‡Π΅ΠΌ ручная ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° `['user_id' => $user->id]`, ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π»ΡŽΠ±Ρ‹ΠΌ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ΠΌ `BelongsTo`.

Для ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ `HasMany` ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ `has()`:

β€œ`php

User::factory()

->has(Post::factory()->count(5))

->create();

β€œ`

4. Π›ΠΎΠΊΠ°Π»ΠΈ Faker для ΠΈΠ½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…

Faker ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ 70 Π»ΠΎΠΊΠ°Π»Π΅ΠΉ. ИзмСнСниС Π»ΠΎΠΊΠ°Π»ΠΈ влияСт Π½Π° ΠΈΠΌΠ΅Π½Π°, адрСса, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΎΠ² ΠΈ символы Π²Π°Π»ΡŽΡ‚.

β€œ`php

// config/app.php

'faker_locale' => 'de_DE',

β€œ`

Или ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ ΠΏΡ€ΠΈ многоязычном Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ:

β€œ`php

protected function withFaker(): FakerGenerator

{

return FakerFactory::create('ja_JP');

}

β€œ`

ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»Π΅ΠΉ Π½Π΅Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎ. `en_US`, `fr_FR`, `de_DE`, `es_ES` ΠΈ `pt_BR` ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π°ΠΌΠΈ. МСнСС распространённыС Π»ΠΎΠΊΠ°Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΌΠΎΠ»Ρ‡Π° ΠΎΡ‚ΠΊΠ°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΊ `en_US` для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‚Π΅Ρ€ΠΎΠ². ВсСгда провСряйтС Π²Ρ‹Π²ΠΎΠ΄ Π»ΠΎΠΊΠ°Π»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π½Π° Π½Π΅Π³ΠΎ Π² Π»ΠΎΠΊΠ°Π»Π΅-спСцифичных тСстах.

5. ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ для Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΉ

Когда Π²Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ прСдсказуСмыС, цикличСски ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ значСния, Π° Π½Π΅ случайныС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ `sequence()`:

β€œ`php

User::factory()

->count(6)

->sequence(

['role' => 'admin'],

['role' => 'editor'],

['role' => 'viewer'],

)

->create();

β€œ`

Π­Ρ‚ΠΎ цикличСски ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚ массив ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, назначая Ρ€ΠΎΠ»ΠΈ ΠΏΠΎ порядку. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½ ΠΈ воспроизводим β€” Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для снимочного тСстирования ΠΈΠ»ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚ΠΎΠ² UI.

6. ΠžΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹: `afterMaking` ΠΈ `afterCreating`

Иногда Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ послС создания ΠΈΠ»ΠΈ сохранСния ΠΌΠΎΠ΄Π΅Π»ΠΈ β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠΈΡ‚ΡŒ сводныС ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ события.

β€œ`php

public function configure(): static

{

return $this->afterCreating(function (User $user) {

$user->profile()->create([

'bio' => $this->faker->paragraph(),

'avatar' => $this->faker->imageUrl(200, 200, 'people'),

]);

});

}

β€œ`

`afterMaking` срабатываСт послС `make()` (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² памяти); `afterCreating` срабатываСт послС `create()` (сохранСно Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…). НС выполняйтС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… Π²Π½ΡƒΡ‚Ρ€ΠΈ `afterMaking` β€” это Π½ΠΈΠ²Π΅Π»ΠΈΡ€ΡƒΠ΅Ρ‚ смысл создания ΠΌΠΎΠ΄Π΅Π»ΠΈ Π² памяти.

ΠšΡ€Π°Ρ‚ΠΊΠΈΠΉ справочник Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‚Π΅Ρ€ΠΎΠ² Faker

ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡΠ€ΠΎΡ€ΠΌΠ°Ρ‚Ρ‚Π΅Ρ€ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹Π²ΠΎΠ΄Π°
ΠŸΠ΅Ρ€ΡΠΎΠ½Π°`name()``Jane Doe`
ΠŸΠ΅Ρ€ΡΠΎΠ½Π°`firstName()` / `lastName()``Marcus` / `Chen`
Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚`safeEmail()``user@example.com`
Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚`url()``https://www.example.org/path`
Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚`ipv4()` / `ipv6()``192.168.1.1` / `::1`
АдрСс`streetAddress()``742 Evergreen Terrace`
АдрСс`city()` / `country()``Springfield` / `Germany`
АдрСс`latitude()` / `longitude()``48.8566` / `2.3522`
Π”Π°Ρ‚Π° ΠΈ врСмя`dateTimeBetween('-1 year', 'now')``2024-03-15 09:22:11`
Π”Π°Ρ‚Π° ΠΈ врСмя`unixTime()``1710494531`
ВСкст`sentence(6)``The quick brown fox jumps.`
ВСкст`paragraphs(3, true)`ΠœΠ½ΠΎΠ³ΠΎΠ°Π±Π·Π°Ρ†Π½Π°Ρ строка
Число`numberBetween(1, 100)``47`
Число`randomFloat(2, 1, 999)``234.87`
ΠŸΠ»Π°Ρ‚Π΅ΠΆΠΈ`creditCardNumber()``4111111111111111`
ΠŸΠ»Π°Ρ‚Π΅ΠΆΠΈ`iban()``DE89370400440532013000`
Π Π°Π·Π½ΠΎΠ΅`uuid()``550e8400-e29b-41d4-a716-446655440000`
Π Π°Π·Π½ΠΎΠ΅`boolean(75)``true` (Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ 75%)
Π Π°Π·Π½ΠΎΠ΅`md5()` / `sha256()`Π₯эш-строки

Faker vs. Ρ€ΡƒΡ‡Π½ΠΎΠ΅ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ vs. снимки производствСнных Π΄Π°Π½Π½Ρ‹Ρ…

ΠŸΠΎΠ΄Ρ…ΠΎΠ΄Π’ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΠ ΠΈΡΠΊ ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈΠ‘Ρ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ Π½Π°ΡΡ‚Ρ€ΠΎΠΉΠΊΠΈΠ Π΅Π°Π»ΠΈΡΡ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…Π›ΡƒΡ‡ΡˆΠ΅ всСго для
**Faker + Π€Π°Π±Ρ€ΠΈΠΊΠΈ**Высокая (с ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡΠΌΠΈ)ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΠ΅Ρ‚ΠΠΈΠ·ΠΊΠ°ΡΠ’Ρ‹ΡΠΎΠΊΠ°ΡΠœΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Π΅, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅, ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ тСсты
**БтатичСскиС фикстуры Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ**Π˜Π΄Π΅Π°Π»ΡŒΠ½Π°ΡΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΠ΅Ρ‚Π’Ρ‹ΡΠΎΠΊΠ°ΡΠΠΈΠ·ΠΊΠ°ΡΠ‘Π½ΠΈΠΌΠΎΡ‡Π½Ρ‹Π΅ / рСгрСссионныС тСсты
**Π‘Π½ΠΈΠΌΠΎΠΊ производствСнных Π΄Π°Π½Π½Ρ‹Ρ…**Π˜Π΄Π΅Π°Π»ΡŒΠ½Π°ΡΠšΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠΉΠ‘Ρ€Π΅Π΄Π½ΡΡΠ˜Π΄Π΅Π°Π»ΡŒΠ½Π°ΡΠ’ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½ΠΎΠ΅ тСстированиС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ
**Π‘Ρ‚ΠΎΡ€ΠΎΠ½Π½ΠΈΠ΅ сСрвисы Π΄Π°Π½Π½Ρ‹Ρ…**Π‘Ρ€Π΅Π΄Π½ΡΡΠΠΈΠ·ΠΊΠΈΠΉΠ‘Ρ€Π΅Π΄Π½ΡΡΠžΡ‡Π΅Π½ΡŒ высокаяНагрузочноС тСстированиС Π² ΠΌΠ°ΡΡˆΡ‚Π°Π±Π΅

Π‘Π½ΠΈΠΌΠΊΠΈ производствСнных Π΄Π°Π½Π½Ρ‹Ρ… Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² срСдах Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ»ΠΈ CI ΠΈΠ·-Π·Π° GDPR, CCPA ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π² ΠΏΠΎ Π·Π°Ρ‰ΠΈΡ‚Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Faker ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ устраняСт этот риск.

БообраТСния ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

НаивноС Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ 100 000 записСй с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ `User::factory()->count(100000)->create()` Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² `create()` запускаСт события Eloquent, выполняСт Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π»ΠΈ ΠΈ выполняСт ΠΎΠ΄ΠΈΠ½ `INSERT` Π½Π° модСль. Для ΠΊΡ€ΡƒΠΏΠ½ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±Π½ΠΎΠ³ΠΎ заполнСния:

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ `createMany()` с Ρ€Π°Π·Π±ΠΈΠ²ΠΊΠΎΠΉ Π½Π° части:

β€œ`php

foreach (range(1, 100) as $chunk) {

User::factory()->count(1000)->create();

}

β€œ`

ΠžΠ±Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ Eloquent с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ прямых вставок:

β€œ`php

$records = User::factory()->count(10000)->make()->map->getAttributes()->toArray();

User::insert($records); // Single bulk INSERT β€” no events, no observers

β€œ`

ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ события ΠΌΠΎΠ΄Π΅Π»ΠΈ Π²ΠΎ врСмя заполнСния:

β€œ`php

User::withoutEvents(function () {

User::factory()->count(50000)->create();

});

β€œ`

ΠšΠΎΠΌΠΏΡ€ΠΎΠΌΠΈΡΡ: ΠΎΠ±Ρ…ΠΎΠ΄ событий ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π»ΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, синхронизация поискового индСкса, инвалидация кэша) Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΡΡ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ. Π­Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ для тСстового заполнСния, Π½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ.

Π Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ вашСго Laravel-прилоТСния: сообраТСния ΠΎΠ± инфраструктурС

Faker ΠΈ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π² срСдах Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ CI, Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠ½ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚, нуТдаСтся Π² Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎΠΉ инфраструктурС. Для Laravel-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² срСда VPS-хостинга Π΄Π°Ρ‘Ρ‚ Π²Π°ΠΌ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ вСрсиСй PHP, ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ OPcache, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… β€” всё это Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ влияСт Π½Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния сидСров ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ вашСго Π½Π°Π±ΠΎΡ€Π° тСстов.

Если вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΈΠ»ΠΈ выполняСт рСсурсоёмкиС задания, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ сСрвСры ΡƒΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Β«ΡˆΡƒΠΌΠ½Ρ‹Ρ… сосСдСй», которая ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ эталонного заполнСния Π½Π΅Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹ΠΌΠΈ. Для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… срСд, Π³Π΄Π΅ Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° управляСмая панСль управлСния вмСстС с вашим Laravel-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, VPS с cPanel ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ настройку PHP, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ окруТСния Π±Π΅Π· нСобходимости Π³Π»ΡƒΠ±ΠΎΠΊΠΈΡ… Π·Π½Π°Π½ΠΈΠΉ администрирования сСрвСров.

Когда вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹ β€” ΠΎΠ±Π΅ распространённыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, сгСнСрированными Faker, β€” Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹ΠΉ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ хостинг Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ письма ΠΈΠ· ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… срСд доходят Π΄ΠΎ тСстировщиков Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Π΄ΠΎΡΡ‚Π°Π²Π»ΡΠ΅ΠΌΠΎΡΡ‚ΡŒΡŽ.

РаспространённыС Π»ΠΎΠ²ΡƒΡˆΠΊΠΈ ΠΈ способы ΠΈΡ… ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ

`OverflowException` Π½Π° `unique()`

ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Faker выполняСтся Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ запроса, Π° Π½Π΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Если Π²Ρ‹ заполняСтС 10 000 ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ `unique()->safeEmail()` Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… запусках сидСра, Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ кэш Faker сбрасываСтся ΠΌΠ΅ΠΆΠ΄Ρƒ запусками, поэтому Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹ всё Ρ€Π°Π²Π½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ индСкс Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°ΠΉΡ‚Π΅ `QueryException` Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Ρ… ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ, ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ `uuid()` Π² качСствС источника ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

ΠœΠΎΠ»Ρ‡Π°Π»ΠΈΠ²Ρ‹ΠΉ ΠΎΡ‚ΠΊΠ°Ρ‚ Π»ΠΎΠΊΠ°Π»ΠΈ, производящий Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° английском языкС

Если `faker_locale` установлСн Π½Π° локаль с Π½Π΅ΠΏΠΎΠ»Π½Ρ‹ΠΌ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ², Faker ΠΌΠΎΠ»Ρ‡Π° откатываСтся ΠΊ английскому для ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‚Π΅Ρ€ΠΎΠ². ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ быстрый Π΄Ρ‹ΠΌΠΎΠ²ΠΎΠΉ тСст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ провСряСт ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹, спСцифичныС для Π»ΠΎΠΊΠ°Π»ΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅ΠΌΠ΅Ρ†ΠΊΠΈΠ΅ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Π΅ индСксы состоят ΠΈΠ· 5 Ρ†ΠΈΡ„Ρ€), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ это Π½Π° Ρ€Π°Π½Π½Π΅ΠΌ этапС.

Π£Ρ‚Π΅Ρ‡ΠΊΠ° Ρ„Π°Π±Ρ€ΠΈΠΊ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½

Π’Ρ€Π΅ΠΉΡ‚ `HasFactory` слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° модСлях, Π³Π΄Π΅ использованиС Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ являСтся Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½Ρ‹ΠΌ. Π’ прилоТСниях с высоким ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ бСзопасности рассмотритС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ удалСния `HasFactory` ΠΈΠ· Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΈ добавлСния Π΅Π³ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² тСстовыС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ.

ΠœΠ΅Π΄Π»Π΅Π½Π½Ρ‹Π΅ Π½Π°Π±ΠΎΡ€Ρ‹ тСстов ΠΈΠ·-Π·Π° ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ записи Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…

ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ `make()` вмСсто `create()` Π² ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Ρ… тСстах, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ сохранСния. `make()` Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ экзСмпляр Eloquent Π² памяти Π±Π΅Π· обращСния ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сокращаСт врСмя выполнСния тСстов.

Жёстко Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ `now()`, Π½Π°Ρ€ΡƒΡˆΠ°ΡŽΡ‰ΠΈΠΉ Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ тСсты

Π—Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ `now()` Π² опрСдСлСниях Ρ„Π°Π±Ρ€ΠΈΠΊ Π½Π° `$this->faker->dateTimeBetween('-1 year', 'now')` для ΠΏΠΎΠ»Π΅ΠΉ Π²Ρ€ΠΎΠ΄Π΅ `created_at` ΠΈΠ»ΠΈ `email_verified_at` ΠΏΡ€ΠΈ тСстировании запросов, зависящих ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ список ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… Π²Ρ‹Π²ΠΎΠ΄ΠΎΠ²

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ этот ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ список ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ настройки Ρ„Π°Π±Ρ€ΠΈΠΊ ΠΈ сидСров ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΈΠ»ΠΈ CI-ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Ρƒ:

  • [ ] ВсС Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ `safeEmail()` ΠΈΠ»ΠΈ эквивалСнтныС Π΄ΠΎΠΌΠ΅Π½Ρ‹ RFC 2606 β€” Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… адрСсов элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹ Π² тСстовых Π΄Π°Π½Π½Ρ‹Ρ…
  • [ ] Поля `unique()` ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ограничСния Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π² качСствС страховочной сСти
  • [ ] Π‘ΠΈΠ΄Π΅Ρ€Ρ‹ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°ΠΌΠΈ `app()->environment()` для прСдотвращСния случайного выполнСния Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅
  • [ ] ΠšΡ€ΡƒΠΏΠ½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ заполнСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΌΠ°ΡΡΠΎΠ²ΡƒΡŽ вставку ΠΈΠ»ΠΈ `withoutEvents()` Ρ‚Π°ΠΌ, Π³Π΄Π΅ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Π΅ эффСкты Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ
  • [ ] ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Ρ‹ зарСгистрированы глобально Π² `AppServiceProvider`, Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ„Π°Π±Ρ€ΠΈΠΊΠ°Ρ…
  • [ ] Π›ΠΎΠΊΠ°Π»ΡŒ явно Π·Π°Π΄Π°Π½Π° Π² `config/app.php` ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π° Π½Π° соотвСтствиС ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΌ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌ Π²Ρ‹Π²ΠΎΠ΄Π°
  • [ ] ΠžΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ `afterCreating` Π½Π΅ Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‚ Π»ΠΎΠ³ΠΈΠΊΡƒ, ΡƒΠΆΠ΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π»ΡΠΌΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ
  • [ ] Бостояния Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ всС Π·Π½Π°Ρ‡ΠΈΠΌΡ‹Π΅ Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… тСстах
  • [ ] `make()` ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Ρ… тСстах; `create()` Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… тСстов
  • [ ] Ни ΠΎΠ΄ΠΈΠ½ Ρ„Π°ΠΉΠ» Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ ΠΈΠ»ΠΈ сидСра Π½Π΅ развёртываСтся Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅ (обСспСчиваСтся Ρ‡Π΅Ρ€Π΅Π· `.gitattributes` ΠΈΠ»ΠΈ скрипты развёртывания)

Часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ вопросы

Π’ Ρ‡Ρ‘ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ `make()` ΠΈ `create()` Π² Ρ„Π°Π±Ρ€ΠΈΠΊΠ°Ρ… Laravel?

`make()` создаёт экзСмпляр ΠΌΠΎΠ΄Π΅Π»ΠΈ Eloquent Π² памяти Π±Π΅Π· записи Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…. `create()` создаёт экзСмпляр ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ сохраняСт Π΅Π³ΠΎ Ρ‡Π΅Ρ€Π΅Π· `INSERT`. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ `make()` Π² ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Ρ… тСстах для скорости; ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ `create()`, ΠΊΠΎΠ³Π΄Π° тСст Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ записи Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

Как Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Faker Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΌ языкС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π΅ΠΌΠ΅Ρ†ΠΊΠΎΠΌ ΠΈΠ»ΠΈ японском?

УстановитС `'faker_locale' => 'de_DE'` (ΠΈΠ»ΠΈ `'ja_JP'`) Π² `config/app.php`. Для ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ `withFaker()` ΠΈ Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ `FakerFactory::create('de_DE')`. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ для Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ Π»ΠΎΠΊΠ°Π»ΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‚Π΅Ρ€Ρ‹ ΠΌΠΎΠ»Ρ‡Π° ΠΎΡ‚ΠΊΠ°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊ английскому.

ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ Faker Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, проходящиС Ρ€Π΅Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°?

Π”Π°, для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° распространённых Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ². НомСра ΠΊΡ€Π΅Π΄ΠΈΡ‚Π½Ρ‹Ρ… ΠΊΠ°Ρ€Ρ‚ проходят ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π›ΡƒΠ½Π°, IBAN ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ структурС ISO 13616, Π° адрСса элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹ синтаксичСски ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹. Однако Faker Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ сгСнСрированныС значСния ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π²ΠΎ Π²Π½Π΅ΡˆΠ½ΠΈΡ… систСмах β€” сгСнСрированный Π½ΠΎΠΌΠ΅Ρ€ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ зарСгистрирован Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° связи.

Как ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ выброс `OverflowException` ΠΏΡ€ΠΈ `unique()` Π²ΠΎ врСмя ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ заполнСния?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‚Π΅Ρ€ с СстСствСнно высокой ΠΊΠ°Ρ€Π΄ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ Π² качСствС источника ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ β€” `uuid()`, `sha256()` ΠΈΠ»ΠΈ составноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ `unique()` Π½Π° полях с Π½ΠΈΠ·ΠΊΠΎΠΉ ΠΊΠ°Ρ€Π΄ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ `boolean` ΠΈΠ»ΠΈ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ пСрСчислСния. Для ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΡƒΠΉΡ‚Π΅ `userName()` с суффиксом Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΈΠ»ΠΈ UUID, Π° Π½Π΅ ΠΏΠΎΠ»Π°Π³Π°ΠΉΡ‚Π΅ΡΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ кэш Π΄Π΅Π΄ΡƒΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Faker.

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Faker Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅ для Π°Π½ΠΎΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…?

НСт. Faker β€” это инструмСнт Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π° Π½Π΅ инструмСнт Π°Π½ΠΎΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ. Для GDPR-совмСстимой Π°Π½ΠΎΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ производствСнных Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π°Π½ΠΎΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, `archtechx/laravel-data-anonymization`), которая замСняСт Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ значСния структурно эквивалСнтными Ρ„ΠΈΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ Π½Π° мСстС, сохраняя ΡΡΡ‹Π»ΠΎΡ‡Π½ΡƒΡŽ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ.