我正在尝试验证存在的电子邮件地址的输入,但仅当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
这是一个粗略的想法,你可以实现你的
您可以使用Rule
类为您自定义验证规则。
'email' => ['required', 'string', 'email', 'max:191',Rule::unique('users')->where(function ($query) use ($request) {
return $query->where('company_id', $request->company_id);
})],
希望这有帮助
这应该回答你的问题。
'required|email|unique:company_users,email_address,NULL,id,company_id,' . $request->company_id
这意味着,电子邮件必须是唯一的,同时忽略id
为NULL
的行,并且其company_id
与$request->company_id
相同。
except 参数忽略要与验证进行比较的行。 例如,用户1
已经占用了abc@gmail.com
的电子邮件地址,但您这样做了:
'unique:company_users,email_address,1'
它将忽略id
为 1 的用户。因此,输入相同的电子邮件仍将通过,因为具有相同电子邮件的现有用户已被忽略。
这在您的情况下是不一样的,因为您只是不想忽略特殊行,但您想忽略基于条件的行。这就是这个答案如何帮助你,通过在忽略参数后添加更多字段验证。
你可能想看看这个: laravel 4:验证唯一(数据库(多个where子句
它必须是这样的:
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
}
通过在变量周围添加'
单引号来$request->company_id
字符串。否则MySQL会认为是表中的一列。
required|email|unique:company_users,email_address,company_id,"'" . (int) $request->company_id . "'"
在请求的 FormRequest
类中使用相同的方法,则可以按如下方式使用它,
'email' => ['required', 'string', 'email', 'max:191', Rule::unique('users')->where(function ($query) {
return $query->where('company_id', $this->company_id);
})],