Laravel-8 请求验证规则如何实现companyName与country_id联合唯一
你需要使用Laravel内置的Rule::unique验证规则实现联合唯一校验,操作如下:
- 先在表单请求类的顶部引入对应命名空间:
use Illuminate\Validation\Rule;
- 修改
companyName的验证规则,追加联合唯一约束,以下示例默认你存储公司数据的表名为companies,如果实际表名不同请自行替换:
public function rules() { return [ //company 'companyName' => [ 'required', 'string', 'min:3', 'max:100', // 联合唯一校验:同一个country_id下companyName不允许重复 Rule::unique('companies') ->where(function ($query) { return $query->where('country_id', $this->input('country_id')); }) ], 'country_id' => [ 'nullable', ], ]; }
额外适配场景说明
- 如果是更新数据的场景,需要忽略当前正在编辑的记录,避免触发自身重复的校验错误。假设你的路由参数中传递的公司ID参数名为
company,可以按如下写法调整:
Rule::unique('companies') ->where(function ($query) { return $query->where('country_id', $this->input('country_id')); }) ->ignore($this->route('company'))
- 当
country_id为null时,上述规则也能正常生效,会匹配数据库中country_id is null的记录做唯一性校验。
内容的提问来源于stack exchange,提问作者mikefolu
相关产品推荐
相关产品推荐

