我目前有一个帐户创建和登录页面。我的模型中有两个页面的规则,对于我的注册,我的规则是这样的:
public static $rules = [
'username' => 'unique:users,username',
'group_id'=>'required',
'password' => 'required'
]
因此,当用户名已经存在时,这基本上就会出错。
现在,我希望插入unique
后的用户名字段group_id
已经拥有相同的用户名。
所以基本上人们可以拥有相同的用户名,如果他们没有相同的group_id
我该怎么做?如果用户名已存在于同一group_id
下,我似乎无法查明如何检查规则。 The laravel validation documentation并未就此发表任何言论。
答案 0 :(得分:0)
它实际上很简单....只是扩展验证。
让我们说你的阵列看起来像这样
$input = ['name' => 'mike', 'group' => 1];
写下通常的规则,
rules = ['name' => 'required|foo', 'group' => 'required'];
这里 foo 将成为绝对规则。
现在,扩展它。
Validator::extend('foo', function($attribute, $value, $parameters) use($input)
{
$count = DB::select('SELECT COUNT(*) AS c FROM users
WHERE group_id=? AND username=?',[$input['group'], $input['name']]);
return $count[0]->c;
});
是的。
它有效,但我更喜欢在数据库中放置唯一约束并捕获错误并采取相应的操作。
答案 1 :(得分:0)
这是在Laravel文档中。 您只需使用扩展的UNIQUE验证规则:
$this->validate($request, [
'email' => 'unique:users,email_address,NULL,id,account_id,1'
]
在上面的规则中,只有account_id为1的行才会包含在唯一检查中。