Laravel在表单中创建或更新模型链接关系中的许多

问题描述 投票:0回答:2

我想创建/更新,表单中的所有记录,我正在寻找一个不使用任何循环的干净解决方案,以下可以通过循环轻松修复。我正在使用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>

enter image description here enter image description here

  1. 如何正确使用createMany并传递数组的数组?
  2. 如何正确更新上述数组?

请尝试提供一个干净的解决方案,我刚刚创建了上面的示例,尝试在laravel中学习正确的结构和数据管理。

php laravel forms relationship
2个回答
1
投票

我不知道这个答案对你来说是否足够干净,但我能得到的最接近的是,使用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()
    );
}

0
投票

我假设“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对象。

© www.soinside.com 2019 - 2024. All rights reserved.