Laravel:不同领域的独特验证

时间:2019-09-18 14:07:40

标签: laravel laravel-5.7

我有一个表states,字段是id,country_id,state_code,state_name。现在,我要验证同一国家/地区在表中没有相同的state_code和相同的state_name

我尝试过,但是没有用。

在我的控制器中:

    $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',
    ]);
}

如果没有自定义验证,该如何解决?

2 个答案:

答案 0 :(得分:1)

首先,您的验证规则仅检查请求中是否存在这些字段。没有验证发生在数据库中存在一个值。首先,您可能想浏览rule_exists的文档。其次,您可能必须根据文档更新此规则的查询


use Illuminate\Validation\Rule;

Validator::make($data, [
    'email' => [
        'required',
        Rule::exists('staff')->where(function ($query) {
            $query->where('account_id', 1);
        }),
    ],
]);

您可以在此处传递其他查询参数。

答案 1 :(得分:0)

您不需要为此进行自定义验证,laravel具有唯一的列验证

col2

通过这种方式,您可以确定idx = df[df[col1] == ""].index # i guess definition of empty is "" df.loc[idx,col1] = df.loc[idx][col2] + df.loc[idx][col1] 中的列值与$this->validate($request, [ 'country_id' => 'required', 'state_code' => 'required|unique:states,state_name', 'state_name' => 'required|unique:states,state_code', ]); 相比是唯一的,以进行更多检查docs