基于documentations。存在可以有4个参数:
exists:table,id,where,0
问题是,如果我希望它不在哪里,该怎么办?比如哪里不是0.
$validator = Validator::make(
array(
'groups' => $groups
),
array(
'groups' => 'required|exists:groups,jid,parent,!=,0'
)
);
答案 0 :(得分:32)
您可以使用unique
示例强>
'email' => 'unique:users,email_address,NULL,id,account_id,1'
在上述规则中,只有account_id为1的行才会包含在唯一身份检查中。
答案 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 不等于