Laravel Eloquent - 保存/更新相关的一对多关系数据
问题描述:
我有一个实体集,其中有很多项目。所以,在更新集合时,表单也会包含更新其项目的字段。我已经做到了,它运行良好,但我不确定它是否是正确和最有效/最优雅的方式。这里是我的代码:Laravel Eloquent - 保存/更新相关的一对多关系数据
$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 docs
是的,我看到了,我猜你并不需要一个特定的收藏传递给saveMany()的对象。我们可以像你一样使用简单的数组。经过测试和验证,它的工作。谢谢。 – 2015-02-12 06:27:05