laravel验证批次列中的唯一值

时间:2015-09-20 06:34:18

标签: php laravel

我的表格有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;
    }
}

但是,我该怎么做呢?

1 个答案:

答案 0 :(得分:1)

如果要验证不同值的输入,则可以在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'