【发布时间】:2022-11-22 19:39:12
【问题描述】:
我正在尝试为我的应用程序创建一个单元测试,并希望测试是否存在关系。对于我的场景,我有一个模型“服务”,它有一个 belongsTo 关系的“company_id”字段。
我想在我的测试中使用一个工厂来创建 10 个“服务”。每个服务都应该有自己独特的“公司”
我一直在靠近,我最近的尝试是这样的
这是我的服务模型中的关系
/**
* Get the company a specified service belongs to
*
* @return BelongsTo
*/
public function company(): BelongsTo
{
return $this->belongsTo(Company::class);
}
这是我的单元测试中的代码。为了实际查看发生了什么,我将结果输出到控制台。
Service::factory()
->count(10)
->create([
'company_id' => Company::factory()->create(),
]);
print_r((Company::all())->toArray());
print_r((Service::with(['company'])->get())->toArray());
结果很有趣。
- 我正确地获得了 10 个填充了 company_id 的服务。
- 所有服务都有一个company_id,但每项服务都是一样的
- 只创建了一个“公司”
- 虽然创建了'公司',但是服务的'公司'关系为空
COMPANY
Array
(
[0] => Array
(
[id] => E39069C262B289573BA59BE5DA3DA182
[name] => Bartoletti, Boehm and Cronin
[account_number] => 013
[phone_number] => (864) 363-8603
[created_at] => 2022-11-22T10:22:12.000000Z
[updated_at] => 2022-11-22T10:22:12.000000Z
[deleted_at] =>
)
)
SERVICES
Array
(
[0] => Array
(
[id] => 92D9C3EEC3F550BBE627B0C7295E948E
[name] => Aut debitis quam excepturi dolor.
[company_id] => E39069C262B289573BA59BE5DA3DA182
[created_at] => 2022-11-22T10:22:12.000000Z
[updated_at] => 2022-11-22T10:22:12.000000Z
[deleted_at] =>
[company] =>
)
[1] => Array
(
[id] => B358067875A3AED5F2590321EE7040E3
[name] => Labore quia quia doloribus fuga adipisci.
[company_id] => E39069C262B289573BA59BE5DA3DA182
[created_at] => 2022-11-22T10:22:12.000000Z
[updated_at] => 2022-11-22T10:22:12.000000Z
[deleted_at] =>
[company] =>
)
... repeated 10 times
)
我如何使用工厂创建 10 个服务,每个服务都有自己的公司?
【问题讨论】:
-
您可以在工厂内部调用 factory(),这对于每个服务都是不同的。如果您在 create() 方法中传递 id,则它对于每个创建的服务都是相同的。因此,将
'company_id' => Company::factory()->create(),移到您的服务工厂内(如果需要,您可以使用作用域)
标签: laravel relationship factory belongs-to