Laravel验证存在于NOT

时间:2013-12-26 13:11:02

标签: php laravel eloquent

基于documentations。存在可以有4个参数:

exists:table,id,where,0

问题是,如果我希望它不在哪里,该怎么办?比如哪里不是0.

$validator = Validator::make(
    array(
        'groups' => $groups
    ),
    array(
        'groups' => 'required|exists:groups,jid,parent,!=,0'
    )
);

6 个答案:

答案 0 :(得分:32)

您可以使用unique

示例

'email' => 'unique:users,email_address,NULL,id,account_id,1'

在上述规则中,只有account_id为1的行才会包含在唯一身份检查中。

http://laravel.com/docs/4.2/validation#rule-unique

答案 1 :(得分:11)

您可以使用以下内容:

Validator::extend('not_exists', function($attribute, $value, $parameters)
{
    return DB::table($parameters[0])
        ->where($parameters[1], '=', $value)
        ->andWhere($parameters[2], '<>', $value)
        ->count()<1;
});

答案 2 :(得分:5)

使用Laravel 5.2或更高版本,您可以使用!添加要检查的值:

'groups' => 'required|exists:groups,jid,parent,!0'

unique的登录名相同,只需要额外的参数:

'groups' => 'required|unique:groups,jid,NULL,id,parent,!0'

答案 3 :(得分:1)

我知道您正在寻找&#39;不是0&#39;,但为了参考起见,您可以使用NOT_NULL,如:

'groups' => 'required|exists:groups,jid,parent,NOT_NULL'

目前未在文档中列出,但here is the discussion about it (see very last post)

答案 4 :(得分:0)

自定义验证器在这里

Validator::extend('not_exists', function($attribute, $value, $parameters, $validator)
{
    $table = array_shift($parameters);
    $db    = \DB::table($table);

    foreach ($parameters as $parameter)
    {
        $check = explode(';', $parameter);
        $col   = array_shift($check);
        $value = array_get($check, 0, array_get($validator->getData(), $col, false));

        $db->where($col, $value);
    }

    return $db->count() < 1;
});   

用法示例:

not_exists:model_has_roles,role_id,model_type;App\User,model_id

您可以像这样传递默认值:

model_type;App\User

答案 5 :(得分:-2)

也许你可以尝试<> 0,那就是 SQL 不等于