Laravel : 不同字段的唯一验证
Laravel : Unique validation with different fields
我有一个 table states
并且字段是 id,country_id,state_code,state_name
。现在我想验证同一个国家没有相同的 state_code
和相同的 state_name
在 table.
我试过了,但没用。
在我的控制器中:
$validator = State::validator($request->all(), $id);
if ($validator->fails()) {
return redirect()->back()
->withErrors($validator->getMessageBag())
->withInput($request->all());
}
这是我在模型中的验证函数:
protected function validator(array $data, $id)
{
return Validator::make($data, [
'country_id' => 'required',
'state_code' => 'required',
'state_name' => 'required',
]);
}
如何在没有自定义验证的情况下解决这个问题?
首先,您的验证规则仅检查请求中是否存在这些字段。数据库中存在的值没有发生验证。首先,您可能想要查看 rule_exists
的文档。其次,您可能必须根据文档更新此规则的查询
use Illuminate\Validation\Rule;
Validator::make($data, [
'email' => [
'required',
Rule::exists('staff')->where(function ($query) {
$query->where('account_id', 1);
}),
],
]);
这里可以传递额外的查询参数。
你不需要自定义验证,laravel 有一个独特的列验证
$this->validate($request, [
'country_id' => 'required',
'state_code' => 'required|unique:states,state_name',
'state_name' => 'required|unique:states,state_code',
]);
通过这种方式,您可以确定 state_code
中的列值与 state_name
中的列值相比是唯一的,更多信息请查看 docs
我有一个 table states
并且字段是 id,country_id,state_code,state_name
。现在我想验证同一个国家没有相同的 state_code
和相同的 state_name
在 table.
我试过了,但没用。
在我的控制器中:
$validator = State::validator($request->all(), $id);
if ($validator->fails()) {
return redirect()->back()
->withErrors($validator->getMessageBag())
->withInput($request->all());
}
这是我在模型中的验证函数:
protected function validator(array $data, $id)
{
return Validator::make($data, [
'country_id' => 'required',
'state_code' => 'required',
'state_name' => 'required',
]);
}
如何在没有自定义验证的情况下解决这个问题?
首先,您的验证规则仅检查请求中是否存在这些字段。数据库中存在的值没有发生验证。首先,您可能想要查看 rule_exists
的文档。其次,您可能必须根据文档更新此规则的查询
use Illuminate\Validation\Rule;
Validator::make($data, [
'email' => [
'required',
Rule::exists('staff')->where(function ($query) {
$query->where('account_id', 1);
}),
],
]);
这里可以传递额外的查询参数。
你不需要自定义验证,laravel 有一个独特的列验证
$this->validate($request, [
'country_id' => 'required',
'state_code' => 'required|unique:states,state_name',
'state_name' => 'required|unique:states,state_code',
]);
通过这种方式,您可以确定 state_code
中的列值与 state_name
中的列值相比是唯一的,更多信息请查看 docs