Laravel 如果在更新时未更改字段,则从数据库返回NULL的带有当前值的下拉字段
问题描述
我有一个Laravel项目,在表单上捕获“操作员”信息,其中一个字段是一个具有3个选项的下拉菜单。捕获工作得很好。然后我有一个选项来编辑操作员的信息。我使用一个表单来显示来自数据库的当前信息,所有的信息都显示正常,下拉菜单显示当前值,但如果我只想更改“name”,而不触动其他任何东西,它会提示下拉菜单为空。所以如果我尝试编辑,但这次我更改了名字并重新选择相同的当前下拉菜单值,它就能工作。我是否正确地使用了这个表单?
这是编辑表单中的下拉菜单字段
<div class="mb-3">
<label for="exampleFormControlSelect1" class="form-label">
Operator Licence Status</label>
<select name="ol" class="form-select" id="exampleFormControlSelect1">
<option selected="" disabled="">{{ $types->ol }}</option>
<option>Available</option>
<option>Applied</option>
<option>None</option>
</select>
</div>
这是更新的控制器函数
public function UpdateOperator(Request request){pid = request->id;
Operator::findOrFail(pid)->update([
'name' => request->name,
'id_num' =>request->id_num,
'address' => request->address,
'phone' =>request->phone,
'email' => request->email,
'ol' =>request->ol,
'ol_number' => request->ol_number,
'fees_paid' =>request->fees_paid,
]);
notification = array(
'message' => 'Taxi Operator Updated Successfully',
'aler-type' => 'success'
);
return redirect()->route('view.operator')->with(notification);
}
如果我选择了下拉菜单的值,它起作用并更新了数据库
解决方案
看起来问题与您在编辑表单中处理下拉菜单值的方式有关。下拉菜单中的选中选项应与数据库中的当前值匹配,以便在更新时能够无缝工作。目前,您正在使用没有值属性的选项,这可能会引发问题。
<div class="mb-3">
<label for="exampleFormControlSelect1" class="form-label">Operator Licence Status</label>
<select name="ol" class="form-select" id="exampleFormControlSelect1">
<option value="Available" {{ types->ol === 'Available' ? 'selected' : '' }}>Available</option>
<option value="Applied" {{types->ol === 'Applied' ? 'selected' : '' }}>Applied</option>
<option value="None" {{ $types->ol === 'None' ? 'selected' : '' }}>None</option>
</select>