如何用Laravel验证规则实现多表记录存在性校验
Laravel验证规则实现公司存在且不在黑名单的校验
你可以直接通过Laravel的内置验证规则完成校验,无需手动查询数据库,具体实现如下:
1. 修改验证规则(AdRequest)
将company_id的验证规则补充unique校验,确保公司ID不在黑名单表中。同时简化重复的规则代码(POST和PUT请求规则一致,无需分支判断):
public function rules() { return [ 'company_id' => 'required|exists:companies,id|unique:companies_blacklist,company_id', 'job_id' => 'required|exists:jobs,id', 'salary' => 'required|numeric|in:1,2,3,4,5,6', 'seniority' => 'required|numeric|in:1,2,3,4,5', 'work_type' => 'required|numeric|in:1,2,3,4', 'ad_url' => 'required|min:5|max:255', 'explanation' => 'nullable|min:25|max:255', ]; }
各规则作用:
required:确保公司ID必填exists:companies,id:校验公司ID在companies表中存在unique:companies_blacklist,company_id:校验公司ID未出现在companies_blacklist表的company_id字段中
2. 添加自定义错误信息
默认的unique提示不够准确,在AdRequest中添加messages方法自定义错误提示:
public function messages() { return [ 'company_id.required' => '公司ID不能为空', 'company_id.exists' => '该公司不存在', 'company_id.unique' => '该公司在黑名单中,无法创建或更新广告', ]; }
3. 简化控制器代码(AdController)
验证规则会自动处理校验逻辑,校验不通过时会自动返回带错误信息的页面,因此可以移除手动查询数据库的代码:
public function store(AdRequest $request) { $inputs = $request->all(); $inputs['user_id'] = 1; $inputs['publish_status'] = 2; Ad::create($inputs); return redirect()->route("admin.ads.index"); }
同理,更新方法(如update)也可以直接使用AdRequest验证,无需额外校验。
内容的提问来源于stack exchange,提问作者mohammad shariati
相关产品推荐
相关产品推荐

