Чтобы установить полиморфную связь «один ко многим» с помощью фабрик Laravel 8, вы можете выполнить следующие шаги:
Шаг 1. Определите таблицы базы данных
Создайте необходимые таблицы базы данных для полиморфных отношений. В этом примере предположим, что у нас есть три таблицы: сообщения, видеои комментарии. Как публикации, так и видеомогут иметь несколько комментариев.
Шаг 2. Определите модели.
Создайте модели для каждой таблицы: Публикация, Видеои Комментарий. За полиморфные отношения будет отвечать модель Comment.
Шаг 3. Определите связи
В модели Commentопределите полиморфные отношения с таблицами postsи videos, используя метод Метод morphTo:
class Comment extends Model
{
public function commentable()
{
return $this->morphTo();
}
}
В моделях Postи Videoопределите обратную связь с помощью метода morphMany:
class Post extends Model
{
public function comments()
{
return $this->morphMany(Comment::class, 'commentable');
}
}
class Video extends Model
{
public function comments()
{
return $this->morphMany(Comment::class, 'commentable');
}
}
Шаг 4. Определите фабрики.
Создайте фабрики для каждой модели (PostFactory, VideoFactory, CommentFactory). Вот пример PostFactoryс полиморфным отношением один-ко-многим:
use App\Models\Post;
use App\Models\Comment;
$factory->define(Post::class, function (Faker $faker) {
return [
'title' => $faker->sentence,
'content' => $faker->paragraph,
];
});
$factory->afterCreating(Post::class, function ($post, $faker) {
$post->comments()->saveMany(factory(Comment::class, 3)->make());
});
В этом примере после создания Postмы используем метод afterCreating, чтобы связать с ним три модели Commentс помощью saveMany.
Шаг 5. Создайте начальные данные
Чтобы сгенерировать начальные данные, запустите программу раздачи базы данных:
php artisan db:seed
Это заполнит таблицы posts, videosи commentsпримерами данных.