# ΠΠ°ΡΡΠ΅ΡΡΡΠ²ΠΎ ΡΠ΅Π°Π»ΠΈΡΡΠΈΡΠ½ΠΎΠΉ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ Π΄Π°Π½Π½ΡΡ Π² 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`), ΠΊΠΎΡΠΎΡΠ°Ρ Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ ΡΠ΅Π°Π»ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΡΡΠΊΡΡΡΠ½ΠΎ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΡΠΌΠΈ ΡΠΈΠΊΡΠΈΠ²Π½ΡΠΌΠΈ Π½Π° ΠΌΠ΅ΡΡΠ΅, ΡΠΎΡ ΡΠ°Π½ΡΡ ΡΡΡΠ»ΠΎΡΠ½ΡΡ ΡΠ΅Π»ΠΎΡΡΠ½ΠΎΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π±Π»ΠΈΡΠ°ΠΌΠΈ.
Π½Π° Π²ΡΠ΅Ρ
Ρ
ΠΎΡΡΠΈΠ½Π³ΠΎΠ²ΡΡ
ΡΡΠ»ΡΠ³Π°Ρ