Laravel | 唯一验证where子句

tal*_*123 5 mysql api laravel lumen

我试图验证输入的电子邮件地址,但仅当company_id与随请求传递的company_id相同时才可以。

我收到此错误...

SQLSTATE [42S22]:找不到列:1054“ where子句”中的未知列“ 1”(SQL:从company_users中选择count(*)作为聚合,其中email_address = myemail.com和1 <> company_id)

我已经在线阅读了,要做的方法是将表和验证中的列关联起来,这就是我正在做的事情。

这是我当前的代码...

required|email|unique:company_users,email_address,company_id,' . $request->company_id
Run Code Online (Sandbox Code Playgroud)

Adn*_*taz 9

这是一个大概的想法,您可以实现自己的目标

您可以使用Rule类为您自定义验证规则。

'email' => ['required', 'string', 'email', 'max:191',Rule::unique('users')->where(function ($query) use ($request) {
    return $query->where('company_id', $request->company_id);
})],
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助


Sle*_*ren 6

它必须是这样的:

required|email|unique:company_users,email_address,' . $request->company_id
Run Code Online (Sandbox Code Playgroud)

格式为:

unique:table,column,'id to exclude'
Run Code Online (Sandbox Code Playgroud)

或者,如果您想基于列进行验证,您可以执行单独的查询:

$exists = Model::where('company_id','!=',$request->company_id)->where('email',$request->email)->count()
if($exists) {
  // return an error or a validation error
}
Run Code Online (Sandbox Code Playgroud)


Wre*_*igh 6

这应该回答你的问题。

'required|email|unique:company_users,email_address,NULL,id,company_id,' . $request->company_id
Run Code Online (Sandbox Code Playgroud)

这意味着,电子邮件必须是唯一的,同时忽略带有idofNULLcompany_id与 相同的行$request->company_id

不同的参数忽略行来比较验证。例如,abc@gmail.com用户已经使用了 的电子邮件地址,1但您这样做了:

'unique:company_users,email_address,1'
Run Code Online (Sandbox Code Playgroud)

它将忽略 1 的用户id。因此输入相同的电子邮件仍然会通过,因为具有相同电子邮件的现有用户已被忽略。

这与您的情况不同,因为您只是不想忽略特殊行,但您想根据条件忽略行。所以这就是这个答案如何帮助你,通过在ignore参数之后添加更多的字段验证。

你可能想看看这个:laravel 4: validation unique (database) multiple where clauses