【问题标题】:Laravel using 2 unique field in Validator()Laravel 在 Validator() 中使用 2 个唯一字段
【发布时间】:2020-08-12 15:15:03
【问题描述】:

我希望我的用户不要有相同的用户名和帐号,这是 2 个唯一字段,我已经有一个现有的数据库,但没有使用迁移。

RegisterController.php

protected function validator(array $data)
    {
        $username = Request::input('Username');
        $accountnum = Request::input('AccountNum');

        return Validator::make($data, [
            'Username' => ['required', 'string', 'max:255','unique:UsersInfo,Username,'.$username],
            'FirstName' => ['required', 'string', 'max:255'],
            'LastName' => ['required', 'string', 'max:255'],
            'AccountNum' => ['required', 'string', 'max:255','unique:UsersInfo,AccountNum,'.$accountnum],
            'MobileNum' => ['required', 'string', 'max:255'],
            'Address' => ['required', 'string', 'max:255'],
            'password' => ['required', 'string', 'min:8', 'confirmed'],
        ]);
    }

每次注册都会出现这个错误

SQLSTATE[22018]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Conversion failed when converting the nvarchar value 'user29' to data type int. (SQL: select count(*) as aggregate from [UsersInfo] where [Username] = user29 and [id] <> user29)

但是,当我删除 'unique:UsersInfo,Username,',$username 时,它会与帐号一起使用,它会给出一个它已经存在的错误。

【问题讨论】:

    标签: php sql-server laravel


    【解决方案1】:

    你应该使用“不同”的规则。

    https://laravel.com/docs/7.x/validation#rule-different

    【讨论】:

    • 我应该为每个字段使用不同的规则吗?
    • 我试过Validator::make($data, [ 'email' =&gt; [ 'required', Rule::exists('staff')-&gt;where(function ($query) { $query-&gt;where('account_id', 1); }), ], ]);,它确实奏效了!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2011-02-19
    • 2018-02-12
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2020-08-07
    • 2016-11-10
    • 2019-03-24
    相关资源
    最近更新 更多