Laravel Eloquent - Save/Update 相关的一对多关系数据
Laravel Eloquent - Save/Update Related One-To-Many Relationship Data
我有一个实体集,里面有很多项目。因此,在更新集合时,表单也包含用于更新其项目的字段。我已经做到了,而且效果很好,但我不确定这是否是正确且最 efficient/elegant 的方法。这是我的代码:
$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 保存。因此每次迭代都会执行一个查询.我使用过滤器,这样它就不必为每次检查都进行查询。
所以我的问题是,是否有更多 efficient/elegant 的方法来做到这一点?也许像 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();
相关模型所指
我有一个实体集,里面有很多项目。因此,在更新集合时,表单也包含用于更新其项目的字段。我已经做到了,而且效果很好,但我不确定这是否是正确且最 efficient/elegant 的方法。这是我的代码:
$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 保存。因此每次迭代都会执行一个查询.我使用过滤器,这样它就不必为每次检查都进行查询。
所以我的问题是,是否有更多 efficient/elegant 的方法来做到这一点?也许像 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();
相关模型所指