我正在尝试更改字段matriculation
和number_motorbike
的值,但是显然这些值已经存在。我有验证问题。
在我的函数 rules()中,我遇到了:(没问题)
public function rules()
{
return [
'matriculation' => 'required|string|max:15|min:6|unique:motorbikes,matriculation',
'number_motorbike' => 'required|string|max:6|min:6|unique:motorbikes,number_motorbike'
];
}
在我的函数 store()中,我遇到了这个问题(没问题)
ublic function store(MotoRequest $request)
{
$exists = Motorbike::where('matriculation', $request->get('matriculation'))->where('number_motorbike', $request->get('number_motorbike'))->count();
if (!$exists){
Motorbike::create($request->all());
return redirect()->route('motorbikes.index')
->with('success', 'new data created successfully');
}
else{
return redirect()->route('motorbikes.index')
->with('error', 'duplicate');
}
}
我的问题出在我的函数update()中,例如,当我只想更改字段matriculation
的值时,我收到一条错误消息“摩托车号码已被占用”。
这是我的函数update(),但我认为问题出在我的函数rules()上吗?
public function edit($id)
{
$motorbikes = Motorbike::find($id);
return view('admin.motorbikes.edit', compact('motorbikes'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(MotoRequest $request, $id)
{
$motorbikes = Motorbike::find($id);
$motorbikes->matriculation = $request->get('matriculation');
$motorbikes->number_motorbike = $request->get('number_motorbike');
$motorbikes->save();
return redirect()->route('motorbikes.index')
->with('success', 'Update!')->withInput();
}
答案 0 :(得分:2)
您可以使用强制唯一规则来忽略ID:https://laravel.com/docs/6.x/validation#rule-unique
您需要用于更新和存储方法的自定义规则。最好的实现方法是在方法中验证请求。因此,您应该从MotoRequest类中删除rules()方法。
public function update(MotoRequest $request, $id)
{
$motorbikes = Motorbike::find($id);
$request->validate([
'matriculation' => [
'required','string','max:15','min:6',
Rule::unique('motorbikes')->ignore($motorbikes)
],
'number_motorbike' => [
'required','string','max:6','min:6',
Rule::unique('motorbikes')->ignore($motorbikes)
]
]);
$motorbikes->matriculation = $request->get('matriculation');
$motorbikes->number_motorbike = $request->get('number_motorbike');
$motorbikes->save();
return redirect()->route('motorbikes.index')
->with('success', 'Update!')->withInput();
}
此外,您无需在 store()中再次检查数据库中是否存在记录,因为该记录已经过验证。
public function store(MotoRequest $request)
{
$request->validate([
'matriculation' => 'required|string|max:15|min:6|unique:motorbikes,matriculation',
'number_motorbike' => 'required|string|max:6|min:6|unique:motorbikes,number_motorbike'
]);
Motorbike::create($request->all());
return redirect()->route('motorbikes.index')
->with('success', 'new data created successfully');
}
答案 1 :(得分:0)
我相信这是您的rules
函数,当您尝试更新项目时,它正在通过rules函数并看到它已经存在并正在传递错误消息。
看看laravel验证文档 https://laravel.com/docs/5.8/validation#rule-unique
基本上,您将需要与用于更新摩托车的验证规则不同的验证规则。 更新一将要求您忽略当前值