БпСстСтС 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 Π½Π΅ Π΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π° случайни числа. Π’ΠΎΠΉ Π΅ Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π» Π·Π° синтСз Π½Π° Π΄Π°Π½Π½ΠΈ, ΡΡŠΠΎΠ±Ρ€Π°Π·Π΅Π½ с Π΄ΠΎΠΌΠ΅ΠΉΠ½Π°. Всяка Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€Π°Ρ‰Π° функция Ρ€Π°Π·Π±ΠΈΡ€Π° структурнитС ΠΏΡ€Π°Π²ΠΈΠ»Π° Π½Π° своя Π΄ΠΎΠΌΠ΅ΠΉΠ½: ΠΈΠΌΠ΅ΠΉΠ» адрСситС ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚ Ρ‚ΠΎΡ‡Π½ΠΎ Π΅Π΄ΠΈΠ½ `@`, Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½ΠΈΡ‚Π΅ Π½ΠΎΠΌΠ΅Ρ€Π° спазват Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»Π½ΠΈΡ‚Π΅ Π½Π°Π±ΠΈΡ€Π°Ρ‚Π΅Π»Π½ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π° Π½ΠΎΠΌΠ΅Ρ€Π°Ρ‚Π° Π½Π° ΠΊΡ€Π΅Π΄ΠΈΡ‚Π½ΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈ ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈΡ‚Π΅ Π½Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΠ° Π½Π° Luhn. Π’ΠΎΠ²Π° Ρ€Π°Π·Π³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π²Π°ΠΆΠ½ΠΎ ΠΏΡ€ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΡ‚ΠΎ тСстванС β€” напълно случаСн Π½ΠΈΠ· Ρ‰Π΅ сС ΠΏΡ€ΠΎΠ²Π°Π»ΠΈ ΠΏΡ€ΠΈ Π²Π°Π»ΠΈΠ΄ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°, ΠΏΡ€Π΅Π΄ΠΈ ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ Π΄Π° достигнС Π΄ΠΎ Π²Π°ΡˆΠ°Ρ‚Π° бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°.

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° сС доставя с Π½Π°Π΄ 180 Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€Π°Ρ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ Π² класовС Π½Π° доставчици:

  • `Person` β€” ΠΈΠΌΠ΅Π½Π°, Ρ‚ΠΈΡ‚Π»ΠΈ, ΠΏΠΎΠ»
  • `Internet` β€” ΠΈΠΌΠ΅ΠΉΠ»ΠΈ, URL адрСси, IP адрСси, MAC адрСси, slug-ΠΎΠ²Π΅
  • `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

ΠšΠΎΠ³Π°Ρ‚ΠΎ Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈΡ‚Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€Π°Ρ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ ΠΏΠΎΠΊΡ€ΠΈΠ²Π°Ρ‚ вашия Π΄ΠΎΠΌΠ΅ΠΉΠ½ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ SKU Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ, Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈ Π½Π° слуТитСли ΠΈΠ»ΠΈ спСцифични Π·Π° компанията ΠΈΠΌΠ΅ΠΉΠ» Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ), Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ пСрсонализиран доставчик.

β€œ`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);

}

}

β€œ`

РСгистрирайтС доставчика Π²ΡŠΡ‚Ρ€Π΅ Π² конструктора Π½Π° Π²Π°ΡˆΠ°Ρ‚Π° Ρ„Π°Π±Ρ€ΠΈΠΊΠ° ΠΈΠ»ΠΈ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° `AppServiceProvider` boot Π·Π° Π³Π»ΠΎΠ±Π°Π»Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΎΡΡ‚:

β€œ`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();

β€œ`

Π’ΠΎΠ²Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π° Ρ†ΠΈΠΊΠ»ΠΈΡ‡Π½ΠΎ ΠΏΡ€Π΅Π· масива Π½Π° послСдоватСлността, присвоявайки Ρ€ΠΎΠ»ΠΈ ΠΏΠΎ Ρ€Π΅Π΄. Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚ Π΅ Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€Π°Π½ ΠΈ Π²ΡŠΠ·ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌ β€” ΠΎΡ‚ ΡΡŠΡ‰Π΅ΡΡ‚Π²Π΅Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π·Π° тСстванС Π½Π° снимки ΠΈΠ»ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° Π΅ΠΊΡ€Π°Π½Π½ΠΈ снимки Π½Π° потрСбитСлски интСрфСйс.

6. ΠžΠ±Ρ€Π°Ρ‚Π½ΠΈ извиквания: `afterMaking` ΠΈ `afterCreating`

Понякога трябва Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ Π»ΠΎΠ³ΠΈΠΊΠ° слСд инстанциранС ΠΈΠ»ΠΈ Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° ΠΌΠΎΠ΄Π΅Π» β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΈΠΊΠ°Ρ‡Π²Π°Π½Π΅ Π½Π° pivot Ρ€Π΅Π»Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΡ.

β€œ`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 срСщу Ρ€ΡŠΡ‡Π½ΠΎ попълванС срСщу снимки Π½Π° производствСни Π΄Π°Π½Π½ΠΈ

ΠŸΠΎΠ΄Ρ…ΠΎΠ΄Π’ΡŠΠ·ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚Π ΠΈΡΠΊ Π·Π° повСритСлностРазходи Π·Π° настройкаРСалистичност Π½Π° даннитСНай-подходящ Π·Π°
**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, Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° опашки ΠΈ Π²Ρ€ΡŠΠ·ΠΊΠΈΡ‚Π΅ с Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ β€” всички ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ пряко влияят Π½Π° скоростта Π½Π° изпълнСниС Π½Π° ΡΠΈΠΉΠ΄ΡŠΡ€ΠΈΡ‚Π΅ ΠΈ производитСлността Π½Π° тСстовия Π²ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚.

Ако Π²Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π΅Π½ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΈΠ»ΠΈ изпълнява рСсурсоСмки Π·Π°Π΄Π°Ρ‡ΠΈ, Dedicated ΡΡŠΡ€Π²ΡŠΡ€ΠΈΡ‚Π΅ Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡ€Π°Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с ΡˆΡƒΠΌΠ½ΠΈΡ‚Π΅ съсСди, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ сравнитСлното попълванС Π½Π΅Π½Π°Π΄Π΅ΠΆΠ΄Π½ΠΈ. Π—Π° ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ ΠΈΠ»ΠΈ срСди Π·Π° тСстванС, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ искатС управляван ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Π½ ΠΏΠ°Π½Π΅Π» Π·Π°Π΅Π΄Π½ΠΎ с Π²Π°ΡˆΠ΅Ρ‚ΠΎ 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 Π΄Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Ρ‚ Ρ€Π΅Π°Π»Π½Π° валидация Π½Π° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°?

Π”Π°, Π·Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ ΠΎΠ±Ρ‰ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈ. НомСрата Π½Π° ΠΊΡ€Π΅Π΄ΠΈΡ‚Π½ΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈ ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈΡ‚Π΅ Π½Π° Luhn, IBAN слСдват структурата Π½Π° ISO 13616, Π° ΠΈΠΌΠ΅ΠΉΠ» адрСситС са синтактично Π²Π°Π»ΠΈΠ΄Π½ΠΈ. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Faker Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°, Ρ‡Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½ΠΈΡ‚Π΅ стойности ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‚ Π² външни систСми β€” Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π΅Π½ Π½ΠΎΠΌΠ΅Ρ€ няма Π΄Π° бъдС рСгистриран ΠΏΡ€ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€.

Как Π΄Π° прСдотвратя `unique()` Π΄Π° Ρ…Π²ΡŠΡ€Π»Ρ `OverflowException` ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π° попълванС Π² голям ΠΌΠ°Ρ‰Π°Π±?

Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€Π°Ρ‰Π° функция с СстСствСно висока кардиналност ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ Π½Π° уникалност β€” `uuid()`, `sha256()` ΠΈΠ»ΠΈ ΡΡŠΡΡ‚Π°Π²Π½Π° стойност. Π˜Π·Π±ΡΠ³Π²Π°ΠΉΡ‚Π΅ `unique()` Π·Π° ΠΏΠΎΠ»Π΅Ρ‚Π° с ниска кардиналност ΠΊΠ°Ρ‚ΠΎ `boolean` ΠΈΠ»ΠΈ ΠΊΡ€Π°Ρ‚ΠΊΠΈ изброявания. Π—Π° уникалност Π½Π° ΠΈΠΌΠ΅ΠΉΠ»ΠΈ, ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°ΠΉΡ‚Π΅ `userName()` с Π²Ρ€Π΅ΠΌΠ΅Π²ΠΈ ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚ΡŠΠΊ ΠΈΠ»ΠΈ UUID суфикс, вмСсто Π΄Π° Ρ€Π°Π·Ρ‡ΠΈΡ‚Π°Ρ‚Π΅ СдинствСно Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈΡ кСш Π·Π° дСдупликация Π½Π° Faker.

Врябва Π»ΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ Faker Π² производство Π·Π° Π°Π½ΠΎΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ€Π΅Π°Π»Π½ΠΈ потрСбитСлски Π΄Π°Π½Π½ΠΈ?

НС. Faker Π΅ инструмСнт Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ, Π° Π½Π΅ инструмСнт Π·Π° Π°Π½ΠΎΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½Π΅. Π—Π° GDPR-ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎ Π°Π½ΠΎΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° производствСни Π΄Π°Π½Π½ΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ спСциализирана Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π° Π°Π½ΠΎΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ `archtechx/laravel-data-anonymization`), която замСства Ρ€Π΅Π°Π»Π½ΠΈΡ‚Π΅ стойности Π½Π° място с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΎ Π΅ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΈ Ρ„ΠΈΠΊΡ‚ΠΈΠ²Π½ΠΈ, Π·Π°ΠΏΠ°Π·Π²Π°ΠΉΠΊΠΈ Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ‚Π½Π°Ρ‚Π° цялост ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅.