laravel 4:验证唯一(数据库)多个where子句

rof*_*eka 6 php sql validation laravel eloquent

laravel 4文档提到了独特的现场验证.他们在这里解释如何将where子句包含在唯一验证中.例如,唯一表的单个WHERE子句:

$validator = Validator::make(
    array(
        'name' => 'John Doe'
    ),
    array(
        'name' => 'unique:table,field,NULL,id,field1,value1'
    )
);
Run Code Online (Sandbox Code Playgroud)

现在我假设这样做:

"SELECT id FROM table WHERE field = 'John Doe' AND field1 = value1 LIMIT 1"
Run Code Online (Sandbox Code Playgroud)

然后检查此查询是否返回结果,如果没有通过验证器.

所以我想知道是否有办法在条款中添加更多内容?如果是这样怎么样?

rof*_*eka 14

结束我原来的问题:

我可以只是叠加它们,或者如果没有我怎么写我的验证?所以我可以添加",field2,value2,field3,value3"等.并像这样堆叠他们?

回答

是的我可以像下面那样堆叠它们.所以,如果我想在我的唯一验证器中添加多个where子句,我会这样做:

'name' => 'unique:table,field,NULL,id,field1,value1,field2,value2,field3,value3'
Run Code Online (Sandbox Code Playgroud)


例外

根据Laravel文档,唯一规则中给出的第三个参数是except参数.

unique:table,column,except,idColumn
Run Code Online (Sandbox Code Playgroud)

我将此参数保留为NULL,因为它与原始问题无关.对于那些想知道这个NULL的功能在唯一规则中的人,让我详细说明:

except参数强制使用唯一规则来忽略给定的ID.因此将其指定为NULL将导致检查每条记录(即忽略任何记录).

例如:假设我们希望我们的用户电子邮件是唯一的,但我们的管理员用户也可能拥有使用相同电子邮件的普通用户帐户.假设我们的管理员用户是我们创建的第一个用户,其id为1.那么在创建新用户时我们可以做的是:

'name' => 'unique:users,email,1,id'
Run Code Online (Sandbox Code Playgroud)

  • 是的,这是except参数.当你想要使用它时,我没有得到,这就是我把它留给"NULL"的原因.但是,嘿,永远不要说永远.我修改了原来的答案,希望这会澄清一下. (2认同)