我的表格有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;
}
}
但是,我该怎么做呢?
答案 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'