Laravel实现Group_Id与Group_Code创建唯一、更新跳过的验证方案咨询
你可以通过动态判断当前是新增还是更新操作来调整验证规则,示例代码如下:
控制器中直接验证的写法
// 公共验证规则 $rules = [ 'Group_Name' => 'required|string', 'Currency' => 'required', 'Country' => 'required', 'State' => 'required', 'City' => 'required', ]; // 自定义错误提示 $messages = [ 'Group_Id.unique' => 'group id/group code already exists', 'Group_Code.unique' => 'group id/group code already exists', ]; // 按请求类型区分场景:POST对应新增,PUT/PATCH对应更新 if (request()->isMethod('post')) { // 新增场景加两个字段的唯一性校验 $rules['Group_Id'] = 'required|unique:你的数据表名,Group_Id'; $rules['Group_Code'] = 'required|unique:你的数据表名,Group_Code'; } else { // 更新场景Group_Code唯一性校验需要排除当前更新的记录 $rules['Group_Code'] = 'required|unique:你的数据表名,Group_Code,' . $当前更新记录的主键ID; // 如果需要严格禁止修改Group_Id,可以加上下面的规则,传了Group_Id字段就会报错 // $rules['Group_Id'] = 'prohibited'; } // 执行验证 $validated = request()->validate($rules, $messages);
注意事项
- 把代码中的
你的数据表名替换为你实际存储分组数据的表名 - 把
$当前更新记录的主键ID替换为你要更新的那条记录的主键值,如果你用了路由模型绑定,比如路由参数是group,直接写$group->id即可 - 两个字段的唯一性错误都绑定了同一个自定义提示,只要任意一个字段重复就会返回你要求的错误信息
如果使用更规范的表单请求类(FormRequest)实现,代码如下:
<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class GroupRequest extends FormRequest { public function rules() { $rules = [ 'Group_Name' => 'required|string', 'Currency' => 'required', 'Country' => 'required', 'State' => 'required', 'City' => 'required', ]; if ($this->isMethod('post')) { $rules['Group_Id'] = 'required|unique:groups,Group_Id'; $rules['Group_Code'] = 'required|unique:groups,Group_Code'; } else { $rules['Group_Code'] = 'required|unique:groups,Group_Code,' . $this->route('group')->id; } return $rules; } public function messages() { return [ 'Group_Id.unique' => 'group id/group code already exists', 'Group_Code.unique' => 'group id/group code already exists', ]; } }
内容的提问来源于stack exchange,提问作者rahul krishna
相关产品推荐
相关产品推荐

