Laravel |唯一验证where子句

时间:2018-03-10 17:31:56

标签: mysql laravel api lumen

我正在尝试验证存在的电子邮件地址的输入,但仅当company_id与随请求传入的company_id相同时才会生效。

我收到此错误...

  

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

我已经在线阅读了,并且这样做的方法是将表和列内部关联验证,这就是我正在做的事情。

这是我目前的代码......

required|email|unique:company_users,email_address,company_id,' . $request->company_id

4 个答案:

答案 0 :(得分:7)

这是一个粗略的想法,你可以实现你的

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

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

希望这有帮助

答案 1 :(得分:2)

必须如下:

required|email|unique:company_users,email_address,' . $request->company_id

格式为:

unique:table,column,'id to exclude'

或者,如果您想根据列进行验证,可以单独进行查询:

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

答案 2 :(得分:1)

这应该回答你的问题。

'required|email|unique:company_users,email_address,NULL,id,company_id,' . $request->company_id

这意味着,电子邮件必须唯一,同时忽略id NULL的行,其company_id与{{1}相同}}

except 参数忽略要与验证进行比较的行。例如,用户$request->company_id已经使用abc@gmail.com的电子邮件地址,但您这样做了:

1

它将忽略'unique:company_users,email_address,1' 为1的用户。因此,输入相同的电子邮件仍会通过,因为已忽略具有相同电子邮件的 现有 用户。

在您的情况下哪个不一样,因为您只是不想忽略特殊行,但是您想忽略基于条件的行。通过在 忽略 参数之后添加更多字段验证,这就是这个答案可以帮助您的方法。

您可能需要查看此内容:laravel 4: validation unique (database) multiple where clauses

答案 3 :(得分:0)

通过在变量周围添加$request->company_id单引号,使'成为一个字符串。否则MySQL会认为是表格中的一列。

required|email|unique:company_users,email_address,company_id,"'" . (int) $request->company_id . "'"