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


Laravel Eloquent - Save/Update Related One-To-Many Relationship Data

我有一个实体Set,里面有很多item。因此,在更新集合时,表单也会包含更新其item的字段。我已经做了,而且效果很好,但我不确定这是否是正确、最有效/最优雅的方法

        $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()之类的东西?

您可以像这样使用方法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文档的相关模型所指出的那样