Создание тестовых данных в Laravel с помощью Factory и Seeder
Laravel Factory — инструмент для генерации поддельных данных, необходимых для тестирования или наполнения базы данных. Он задаёт стандартные значения для модели через метод definition()
. Factory использует библиотеку Faker для создания правдоподобных случайных данных, имитирующих реальные данные.
Laravel Seeder служит для заполнения базы данных фиктивными данными или значениями по умолчанию, часто применяясь для первоначальной настройки сред разработки, тестирования и производства. Seeder и Factory работают совместно, позволяя создавать большие объёмы структурированных тестовых данных.
Генерация Factory
Для создания Factory для модели Designations
используется следующая команда artisan
:
php artisan make:factory DesignationFactory --model=Designations
Генерация Seeder
Создаётся Seeder для таблицы Designations
:
php artisan make:seeder DesignationSeeder
Модификация модели Designations
В модель Designations
вносятся следующие изменения:
Файл: app/Models/Designations.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Designations extends Model
{
use HasFactory;
protected $fillable = ['name', 'description'];
}
Изменение файла Seeder
Файл сида модифицируется для использования Factory при создании тестовых записей:
Файл: database/seeders/DesignationsSeeder.php
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use App\Models\Designations;
class DesignationsSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
Designations::factory()
->count(3) // Number of records to create
->create();
}
}
Настройка файла Factory
В файле Factory определяются атрибуты модели Designations
:
Файл: database/factories/DesignationsFactory.php
<?php
namespace Database\Factories;
use App\Models\Designations;
use Illuminate\Database\Eloquent\Factories\Factory;
class DesignationsFactory extends Factory
{
protected $model = Designations::class;
/**
* Define the model's default state.
*/
public function definition(): array
{
return [
'name' => fake()->name(),
'description' => fake()->sentence(10),
];
}
}
Запуск Seeder
Запуск Seeder для заполнения базы данных тестовыми данными:
php artisan db:seed --class=DesignationsSeeder
Заключение
В результате выполнения описанных шагов вы успешно создали Factory для генерации тестовых данных, настроили Seeder для заполнения базы данных и убедились в корректной настройке модели с использованием HasFactory. Это обеспечивает эффективный и упорядоченный подход к добавлению тестовых данных в ваше приложение Laravel.