Laravel Eloquent - 保存/更新相关的一对多关系数据

时间:2015-02-12 02:56:26

标签: php laravel eloquent relationship

我有一个实体集,里面有很多项。因此,在更新集合时,表单还包括用于更新其项目的字段。我已经做到了并且运作良好,但我不确定它是否是正确,最有效/优雅的方式。这是我的代码:

        $set->fill(Input::all());

        foreach (Input::get('course') as $course_id => $content) {
            $item = $set->items->filter(function ($item) use ($course_id) {
                return ($item->course_id == $course_id);
            })->first();
            $item->content = $content;
            $set->items()->save($item);
        }
        $set->save();

正如您所看到的,对于每个项目,我遍历所有输入(可能会有多少输入),对其进行过滤,并将值1保存为1.因此,每次迭代都会执行查询。我使用过滤器,因此不必对每次检查进行查询。

所以我的问题是,是否有一种更有效/更优雅的方式来做到这一点?像saveMany()之类的东西可能吗?

1 个答案:

答案 0 :(得分:4)

您可以使用 saveMany 这样的方法:

        $set->fill(Input::all());
        $items = array();
        foreach (Input::get('course') as $course_id => $content) {
            $item = $set->items->filter(function ($item) use ($course_id) {
                return ($item->course_id == $course_id);
            })->first();
            $item->content = $content;
            $items[] = $item;
        }

        $set->items()->saveMany($items);
        $set->save();

正如laravel docs

的相关模型所指出的那样