批处理列中的单个验证值


laravel validation unique value in batch of columns

我有一个有role列的表,我必须检查和验证每个type只需要一个manager像这样:

| id |   role | type | name 
_______________________________
| 1 | manager | 1    | Pedram 
| 2 | member  | 1    | Parham
| 3 | member  | 2    | Pedram 
| 4 | member  | 1    | Parham

我必须这样做与Laravel unique:验证。

我写了一个自定义验证,它可以工作:

    public function validateUniqueValue($attribute, $value, $parameters)
{
    $query = DB::table($parameters[0])->where($parameters[1], $value);
    if (array_key_exists(2, $parameters)) {
        $query->where($parameters[2], $parameters[3]);
    }
    if ($query->count() > 0) {
        return false;
    }
    else {
        return true;
    }
}

但是,我怎么能做这样的事情?

如果您想要验证不同值的输入,那么您可以在Validator中使用unique:tablename约束。然而,我们也可以在约束条件中添加连词。在你的例子中,你可以这样做:

$validator = Validator::make
(
      ['type' => $typeval], 
      ['type' => 'unique:table,role,' . $role_value]
);
if($validator->fails()) //not distinct role, type pair
else //distinct

生成SQL:

SELECT COUNT(*) FROM `table` WHERE `type` = ? AND `role` = ?

显然,这将允许任何角色/类型的所有不同对而不仅仅是管理器/类型对但如果你只想检查不同的管理器/类型对你需要让$role_value = 'manager'