我想知道Laravel请求验证中是否有一些规则的作用类似于required_if/required,除非它检查表中是否存在该值。
例如,我有一个包含两个字段的表单——last_name和phone_number。提交表单后,我需要将这些数据保存到一个表中。但是,我需要检查一下桌子上是否有电话号码。如果电话号码已经在表中,我需要显示一个错误,但应该可以保存数据。类似unique_unless:ignore_duplicates:table,phone_number
我看到了类似的流动
- 填写表格并提交
- 请求已验证,并显示电话号码已被占用的消息
- 设置一个复选框,我希望忽略此类错误并再次提交数据
- 请求已再次验证,但跳过了此唯一性时间规则
- 如果没有发生其他错误,请保存数据
我认为这里没有任何开箱即用的东西。但如果我正确地理解了你的问题,这可以通过一个基于闭包的规则来解决,比如:
$rules = [
...,
'phone_number' => [
...,
function ($attribute, $value, $fail) use ($request) {
if (! $request->input('override')) {
if (YourModel::where('phone_number', $value)->first()) {
$fail("YourModel with this phone number already exists.");
}
}
}
]
];