我想创建/更新,表单中的所有记录,我正在寻找一个不使用任何循环的干净解决方案,以下可以通过循环轻松修复。我正在使用laravel 5.8
型号类别:学校 - > HasMany(模特类:程序)
这是存储方法(这需要修复)
public function store(Request $request, School $school)
{
$school->programs()->createMany(array($request->day, $request->schedule));
}
这是更新方法(这需要修复)
public function update(Request $request, School $school)
{
$school->programs()->update(array($request->day, $request->schedule));
}
表单有一个简单的数组输入
<td width><input type="number" name="day[]" placeholder="Course Day (1-5)" class="form-control" /></td>
<td width><input type="text" name="schedule[]" placeholder="Actual schedule" class="form-control" /></td>
请尝试提供一个干净的解决方案,我刚刚创建了上面的示例,尝试在laravel中学习正确的结构和数据管理。
我不知道这个答案对你来说是否足够干净,但我能得到的最接近的是,使用map
收集功能。
public function store(Request $request, School $school)
{
$school->programs()->createMany(
collect($request->day)->map(function($day, $key) {
return [
'day' => $day,
'schedule' => request('schedule')[$key],
];
})->toArray()
);
}
我假设“day”键中的每个值与“schedule”键中的每个值匹配,例如日“1”与日程“test1”匹配。我们可能会这样做。
public function store(School $school)
{
collect(request('day'))->map(function ($day, $index) {
return [
'day' => day,
'schedule' => request('schedule')[$index]
];
)->each(function ($program) use ($school) {
$school->programs()->create($program);
});
}
为了使代码更清晰,我使用request()辅助函数而不是$ request对象。