Метод has
Метод has класса Factory применяется для определения
отношения "один ко многим" при создании моделей в тестах.
Первый параметр - это фабрика дочерней модели или количество
создаваемых экземпляров. Метод возвращает экземпляр фабрики,
позволяя строить цепочки вызовов.
Синтаксис
<?php
Factory::has($factory, $count = 1);
?>
Пример
Давайте создадим категорию с двумя статьями:
<?php
use AppModelsCategory;
use AppModelsArticle;
use IlluminateFoundationTestingRefreshDatabase;
$res = Category::factory()
->has(Article::factory()->count(2))
->create();
echo $res->articles->count();
?>
Результат выполнения кода:
"2"
Пример
Давайте создадим пользователя с тремя постами, используя сокращённый синтаксис:
<?php
use AppModelsUser;
use AppModelsPost;
use IlluminateFoundationTestingRefreshDatabase;
$user = User::factory()
->hasPosts(3)
->create();
echo $user->posts->count();
?>
Результат выполнения кода:
"3"
Пример
Давайте создадим пост с комментариями и укажем состояние для дочерних моделей:
<?php
use AppModelsPost;
use AppModelsComment;
use IlluminateFoundationTestingRefreshDatabase;
$res = Post::factory()
->has(
Comment::factory()
->count(2)
->state(['approved' => true])
)
->create();
foreach ($res->comments as $comment) {
echo $comment->approved;
}
?>
Результат выполнения кода:
"1"
"1"
Пример
Давайте создадим родительскую модель и сразу получим
связанные модели с помощью метода create:
<?php
use AppModelsAuthor;
use AppModelsBook;
use IlluminateFoundationTestingRefreshDatabase;
$res = Author::factory()
->hasBooks(2)
->create();
$titles = $res->books->pluck('title')->toArray();
print_r($titles);
?>
Результат выполнения кода:
["book 1", "book 2"]