gpt4 book ai didi

php - Laravel 在工厂测试的嵌套关系

转载 作者:搜寻专家 更新时间:2023-10-31 21:53:50 25 4
gpt4 key购买 nike

我遇到了问题,我不得不承认我找不到任何解决方案。
我实际上正在开发一些功能测试,而工厂阻止了我。

首先,我试图向工厂添加一个名为“Tasklist”的实体,它包含一个或多个“部分”,其中包含一个或多个“操作”。
我有一个 3 级的深层关系。

这是我的工厂:

    $factory->define(\App\V2\Models\Tasklist::class, function (\Faker\Generator $faker) {
return [
'id_course' => \App\V2\Models\Program::all()->random(1)->id,
'id_event' => \App\V2\Models\Stage::all()->random(1)->id,
'id_course_rounds' => \App\V2\Models\ProgramRound::all()->random(1)->id,
'name' => $faker->word,
'display_name' => $faker->word,
'color' => 0,
'key' => str_random(16),
'auto_active' => 1,
'status' => 1,
];
});

$factory->define(\App\V2\Models\TasklistSection::class, function (\Faker\Generator $faker) {
return [
'id_tasklist' => function(){
return factory(\App\V2\Models\Tasklist::class)->create()->id;
},
'number' => 1,
'title' => $faker->word,
'text' => $faker->text(100),
'status' => 1
];
});

$factory->define(\App\V2\Models\TasklistAction::class, function(\Faker\Generator $faker) {
return [
'id_tasklists_section' => factory(\App\V2\Models\TasklistSection::class)->create()->id,
'number' => rand(1, 10),
'title' => $faker->word,
'percent' => $faker->numberBetween(0, 100),
'status' => 1
];
});

在我的测试类(class)中,我试图通过一个操作生成一个包含 1 个部分的任务列表。我发现的唯一方法实际上是这样的:
$task = factory(Tasklist::class, 2)->create()
->each(function($t){
$t->sections()->save(factory(TasklistSection::class)->create()
->each(function($s){
$s->actions()->save(factory(TasklistAction::class)->create());
})
);
});

对于此代码,如果我每个删除第二个,它就可以工作,我有 2 个任务列表,每 1 个部分。事实上,每一个都让我感到不安。

我只想创建一个任务列表,其中包含一个或多个部分,其中包含一项或多项操作。

但是每个只接受集合输入,保存方法只接受模型输入而不接受集合。

有人知道如何处理吗?

最佳答案

一种方法可以是这样的:
使用部分创建任务并将它们存储在变量中,然后循环遍历每个任务部分并向其添加操作,如下所示:

$tasklist = factory(App\Tasklist::class)->create();
$tasklist->sections()->saveMany(factory(App\TasklistSection::class, 3)->make());

foreach ($tasklist->sections as $section){
$section->actions()->saveMany(factory(App\TasklistAction::class, 3)->make());
}

这将按预期工作。

关于php - Laravel 在工厂测试的嵌套关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35913888/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com