我有一个有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'