Заполнение таблиц фабрики
Чтобы увидеть пример написания фабрики, взгляните на файл database/factories/UserFactory.php
в вашем приложении. Эта фабрика включена во все приложения Laravel:
database/factories/UserFactory.php<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;
class UserFactory extends Factory
{
public function definition()
{
return [
'name' => fake()->name(),
'email' => fake()->unique()->safeEmail(),
'email_verified_at' => now(),
'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
'remember_token' => Str::random(10),
];
}
}
Фабрики – это классы, которые расширяют базовый класс фабрики Laravel и определяют метод definition
. Метод definition
возвращает набор значений атрибутов по умолчанию, которые должны применяться при создании модели с использованием фабрики.
Через свойство $faker
фабрики получают доступ к библиотеке Faker PHP
, которая позволяет вам удобно генерировать различные виды случайных данных для тестирования.
Запуск фабрики
Фабрика запускается из дефолтного сидера, давайте рассмотрим запуск встроенной фабрики UserFactory.php
:
database/seeders/DatabaseSeeder.php<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
public function run()
{
$this->call([
UserSeeder::class,
]);
}
}
database/seeders/UserSeeder.php<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
class UserSeeder extends Seeder
{
public function run()
{
\App\Models\User::factory(10)->create(); // обрашаемся к фабрике User
}
}
Перед началом работы с фабрикой, обязательно должна быть создана модель для работы с базой.
Запуск сидера
Теперь можно в терминале запустить команду на инициализацию сидера:
php artisan db:seed
По умолчанию команда db:seed
вызывает класс DatabaseSeeder
, который может быть использован для вызова других классов, заполняющих БД начальными данными.