【问题标题】:Laravel create or update many in a model linked relationship from formLaravel 从表单创建或更新许多模型链接关系
【发布时间】:2019-04-13 08:48:29
【问题描述】:

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

模型 Class:School -> HasMany (Model Class:Program)

这是 store 方法(这需要修复)

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>

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

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

【问题讨论】:

  • program表的数据库结构?
  • 我正在寻找 store() 和 update() 函数的解决方案,而不是数据库 :)
  • 是的,我们需要知道程序表的列
  • 添加节目表供参考,谢谢

标签: php laravel forms relationship


【解决方案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()
    );
}

【讨论】:

  • 只是对你的函数的一个快速修复,你必须添加collect(....)->toArray()才能处理,除此之外,非常感谢。
【解决方案2】:

我假设“day”键中的每个值都与“schedule”键中的每个值匹配,例如day“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 对象。

【讨论】:

    猜你喜欢
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    相关资源
    最近更新 更多