仅当输入存在相同的group_ID时,Laravel才是唯一的

时间:2015-02-12 13:33:28

标签: php validation laravel

我目前有一个帐户创建和登录页面。我的模型中有两个页面的规则,对于我的注册,我的规则是这样的:

public static $rules = [
    'username' => 'unique:users,username',
    'group_id'=>'required',
    'password' => 'required'
]

因此,当用户名已经存在时,这基本上就会出错。

现在,我希望插入unique后的用户名字段group_id已经拥有相同的用户名。

所以基本上人们可以拥有相同的用户名,如果他们没有相同的group_id

我该怎么做?如果用户名已存在于同一group_id下,我似乎无法查明如何检查规则。 The laravel validation documentation并未就此发表任何言论。

2 个答案:

答案 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的行才会包含在唯一检查中。

了解更多: https://laravel.com/docs/5.2/validation#rule-distinct