为新建某记录添加了一个表单验证类,想复用到更新功能中,结果却提示编号已存在。
很明显是表单验证类的问题,因为添加新纪录时能保证唯一列的唯一性,所以没问题。但是更新记录时,因为记录已存在,表单验证类去检查唯一性时,就会把当前要更新的记录也统计上,发现有“重复”,所以提示已存在。
百度了下,其实很简单,添加一个排除参数即可。
通过路由route()获取参数,从而能知道id,然后按照如下方式排除
unique:表名,字段,需要排除的ID
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class LocationUpdateRequest extends FormRequest
{
public function rules()
{
//获取当前需要排除的id,这里的 location 是 路由 {} 中的参数,即隐性路由绑定
$location = $this->route('location');
return [
'number' => 'required|between:3,24|unique:locations,number,' . $location->id,
];
}
}
未排除代码
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class LocationRequest extends FormRequest
{
public function rules()
{
return [
'number' => 'required|between:3,24|unique:locations,number',
];
}
}