代码之家  ›  专栏  ›  技术社区  ›  user8116198

Laravel |唯一验证where子句

  •  12
  • user8116198  · 技术社区  · 8 年前

    我正在尝试验证存在的电子邮件地址的输入,但仅当company\u id与随请求传入的company\u id相同时。

    我收到此错误。。。

    SQLSTATE[42S22]:未找到列:“where子句”(SQL:选择count(*)中的1054未知列“1”,作为来自company\u用户的聚合,其中email\u address=myemail。com和1<&燃气轮机;公司id)

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

    这是我当前的代码。。。

    required|email|unique:company_users,email_address,company_id,' . $request->company_id
    
    4 回复  |  直到 8 年前
        1
  •  20
  •   FULL STACK DEV    8 年前

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

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

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

    希望这有帮助

        2
  •  7
  •   Wreigh    8 年前

    这应该能回答你的问题。

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

    这意味着,电子邮件必须 唯一的 忽略具有 id 属于 NULL 以及 company_id 与相同 $request->company_id 。

    这个 除了 参数忽略要与验证进行比较的行。E、 g.,电子邮件地址 abc@gmail.com 已被用户获取 1 但你做到了:

    'unique:company_users,email_address,1'
    

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

    这与您的情况不同,因为您只是不想忽略一个特殊的行,而是想忽略一个基于条件的行。这就是这个答案如何帮助您,通过添加更多字段验证 之后 这个 忽视 参数

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

        3
  •  5
  •   Sletheren    8 年前

    它必须是这样的:

    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
    }
    
        4
  •  0
  •   Marwelln    8 年前

    制作 $request->company_id 通过添加 ' 变量周围的单引号。否则MySQL会认为是表中的一列。

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