在创建表单(> 50个字段)时,我从用户那里得到了很多输入,我想在其中编辑那些详细信息。
我已将所有字段设置为可空,以便在编辑时将这些字段保留为空,
控制器:
public function update(Request $request, $id)
{
$engineers = Engineers::findOrFail($id);
$engineers->input1 = $request->input('input1');
$engineers->input2 = $request->input('input2');
$engineers->input3 = $request->input('input3');
$engineers->input4 = $request->input('input4');
$engineers->save();
}
当我尝试编辑input2时,所有内容都保留为空白时,数据库中的所有其他字段均为空白。
我发现的另一个选择是
public function update(Request $request, $id)
{
$engineers = Engineers::findOrFail($id);
if($request->input('input1')){
$engineers->input1 = $request->input('input1');
}
if($request->input('input2')){
$engineers->input2 = $request->input('input2');
}
if($request->input('input2')){
$engineers->input2 = $request->input('input2');
}
if($request->input('input2')){
$engineers->input2 = $request->input('input2');
}
$engineers->save();
}
通过执行上述操作,相应的记录将更改,所有其他字段保持不变。
我还注意到可以提交一个空的编辑表单。
还有其他更好的方法吗?
答案 0 :(得分:1)
filled
的 $request
方法。
if($request->filled('name')){
//if name is present in request object and not empty.
}
详细了解here
答案 1 :(得分:1)
这样做,这一步看起来也很短,
$engineers = Engineers::findOrFail($id);
$engineers->fill($request->all())->save();
答案 2 :(得分:1)
您可以在填写条目之前过滤输入,例如:
$engineers = Engineers::findOrFail($id);
$engineers->fill(array_filter($request->all()))->save();
这将删除所有虚假条目,即null
以及0
和''
如果要严格删除null,则可以执行以下操作:
$engineers = Engineers::findOrFail($id);
$engineers->fill(array_filter($request->all(), function ($value) {
return $value !== null;
}))->save();