Фабрики моделей в сидерах Laravel
Фабрики часто подключают к сидерам.
Так проще наполнить базу большим
числом связанных записей через
Eloquent, а не через DB::insert.
В сидере доступны состояния,
sequence, has
и коллбэки - так же, как в коде
приложения и тестах.
Пример в DatabaseSeeder:
<?php
namespace Database\Seeders;
use App\Models\User;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
public function run(): void
{
User::factory()->count(20)->create();
}
}
?>
Можно комбинировать фабрики и ручные данные. Сначала создают фиксированного администратора, затем случайных пользователей:
<?php
User::factory()->create([
'name' => 'admin',
'email' => 'admin@site.com',
]);
User::factory()->count(19)->create();
?>
В отдельном сидере для постов:
<?php
namespace Database\Seeders;
use App\Models\Post;
use Illuminate\Database\Seeder;
class PostSeeder extends Seeder
{
public function run(): void
{
Post::factory()->count(50)->create();
}
}
?>
Запуск остается прежним:
php artisan db:seed
или php artisan db:seed --class=PostSeeder.
Если нужны только случайные строки без модели, в базовом учебнике достаточно Faker в сидере. Фабрики выбирают, когда данные создают через Eloquent и переиспользуют в тестах.
Наполните таблицу постов через фабрику в отдельном сидере.
Создайте одного админа вручную
и 10 пользователей через
фабрику в DatabaseSeeder.