Связанные записи через фабрики в Laravel
Часто нужно создать не одну запись, а модель вместе со связанными - пользователя с постами или пост для конкретного автора. Фабрики умеют создавать такие связки.
Метод has создает дочерние
записи через связь модели.
У пользователя есть посты -
создадим троих с тремя постами
каждый:
<?php
use App\Models\Post;
use App\Models\User;
User::factory()
->has(Post::factory()->count(3))
->create();
?>
Laravel сам подставит user_id
в посты. Если имя связи не совпадает
с именем модели, его указывают
вторым аргументом:
<?php
User::factory()
->has(Post::factory()->count(2), 'posts')
->create();
?>
Метод for задает родителя
для дочерней модели. Сначала
создают пользователя, затем посты
для него:
<?php
$user = User::factory()->create();
Post::factory()
->count(5)
->for($user)
->create();
?>
Можно комбинировать for
и состояния:
<?php
Post::factory()
->draft()
->for(User::factory()->admin())
->create();
?>
Так проще наполнять базу связанными данными для тестов и сидеров, чем вручную подставлять id в каждую вставку.
Создайте пользователя с
5 постами через has.
Создайте пост для уже существующего
пользователя через for.