mysql laravel |唯一验证where子句

nuypyhwy  于 2023-05-16  发布在  Mysql
关注(0)|答案(5)|浏览(147)

我正在尝试验证一个电子邮件地址的输入,该地址存在,但仅当company_id与请求中传递的company_id相同时。
我得到这个错误…
SQLSTATE[42S22]:未找到列:1054“where子句”中的未知列“1”(SQL:select count(*)as aggregate from company_users where email_address = myemail.com and 1 <> company_id)
我已经在网上读过了,这样做的方法是将表和验证中的列相关联,这就是我正在做的。
这是我目前的代码…

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

gk7wooem1#

这里是一个粗略的想法与此你可以实现什么你
您可以使用Rule类为您自定义验证规则。

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

希望这对你有帮助

jgzswidk

jgzswidk2#

这应该能回答你的问题。

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

这意味着,电子邮件必须是唯一的,同时忽略NULLid行,并且其company_id$request->company_id相同。

except参数忽略要与验证进行比较的行。例如,abc@gmail.com的电子邮件地址已被用户1占用,但您执行了以下操作:

'unique:company_users,email_address,1'

它将忽略id为1的用户。因此,输入相同的电子邮件仍将通过,因为具有相同电子邮件的***现有***用户已被忽略。
这与您的情况不同,因为您不想忽略特殊行,而是想忽略基于条件的行。这就是这个答案如何帮助您,通过在***ignore*参数后添加更多的字段验证
你可能想看看这个:laravel 4: validation unique (database) multiple where clauses

wtlkbnrh

wtlkbnrh3#

必须是这样的:

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
}
cqoc49vn

cqoc49vn4#

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

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

rqdpfwrv5#

如果你想在FormRequest类中对请求使用相同的方法,那么你可以按如下方式使用它:

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

相关问题