You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 08:15:43