РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1308 of 1392 menu

Команда make:factory

Команда make:factory создаёт новый класс фабрики в директории database/factories. Фабрики используются для определения шаблонов генерации тестовых данных, которые затем применяются в сидерах и тестах. Первым аргументом передаётся имя фабрики, вторым - опциональная модель, для которой она создаётся.

Синтаксис

php artisan make:factory FactoryName php artisan make:factory FactoryName --model=ModelName

Основные параметры команды:

  • FactoryName - имя создаваемого класса фабрики
  • --model - опциональный параметр, указывающий модель, для которой создаётся фабрика

Пример

Создадим фабрику для модели Article:

<?php namespace Database\Factories; use App\Models\Article; use Illuminate\Database\Eloquent\Factories\Factory; use Illuminate\Support\Str; class ArticleFactory extends Factory { protected $model = Article::class; public function definition() { return [ 'title' => $this->faker->sentence, 'content' => $this->faker->paragraphs(3, true), 'status' => $this->faker->randomElement(['draft', 'published']), 'views' => $this->faker->numberBetween(0, 1000), 'is_active' => $this->faker->boolean(80), ]; } } ?>

В этом примере фабрика определяет правила генерации данных для модели Article. Метод definition возвращает массив со значениями полей, используя Faker для генерации реалистичных данных.

Пример

Создадим фабрику с явным указанием модели через параметр --model:

php artisan make:factory UserFactory --model=User
<?php namespace Database\Factories; use App\Models\User; use Illuminate\Database\Eloquent\Factories\Factory; use Illuminate\Support\Facades\Hash; class UserFactory extends Factory { protected $model = User::class; public function definition() { return [ 'name' => $this->faker->name, 'email' => $this->faker->unique()->safeEmail, 'password' => Hash::make('password'), 'remember_token' => Str::random(10), ]; } } ?>

При указании параметра --model Laravel автоматически связывает фабрику с указанной моделью и подставляет её в свойство $model.

Пример

Рассмотрим использование фабрики для создания записей в сидерах:

<?php namespace Database\Seeders; use App\Models\Article; use App\Models\User; use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { public function run() { // Создание 10 статей Article::factory()->count(10)->create(); // Создание 5 пользователей User::factory()->count(5)->create(); // Создание статьи с конкретными значениями Article::factory()->create([ 'title' => 'Special Article', 'status' => 'published', ]); } } ?>

Пример

Использование фабрики в тестах для генерации тестовых данных:

<?php namespace Tests\Feature; use App\Models\Article; use App\Models\User; use Illuminate\Foundation\Testing\RefreshDatabase; use Tests\TestCase; class ArticleTest extends TestCase { use RefreshDatabase; public function test_articles_index() { // Создаём пользователя $user = User::factory()->create(); // Создаём 5 статей для пользователя $res = Article::factory() ->count(5) ->create(['user_id' => $user->id]); $this->assertCount(5, $res); } } ?>

Результат выполнения кода:

"Test passed successfully"

Смотрите также

  • команда db:seed,
    которая заполняет базу данных тестовыми записями
  • команда make:seeder,
    которая создаёт класс сидера
  • команда make:model,
    которая создаёт новую модель Eloquent
  • команда make:migration,
    которая создаёт новый файл миграции
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить