Как проверить уникальную комбинацию двух полей в Laravel? - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь добавить ограничения проверки при регистрации нового пользователя и хочу, чтобы комбинация двух полей была уникальной в базе данных.Ошибка, которую я получаю из базы данных, говорит, что у меня нарушение целостности.моя таблица называется users, а поля, которые я хочу иметь уникальную комбинацию, называются ssn и lastfour.

Я добавил строку $ table-> unique (array ('ssn', 'lastfour'));в миграции пользователя, и я также добавил некоторые поля в регистрации, которые работают нормально, и база данных в порядке.Я попробовал решение в похожем вопросе, опубликованном около 9 месяцев назад Уникальная проверка Laravel по нескольким столбцам , но я получил неопределенную переменную в строке "Правило :: уникальные ('серверы)" -> где (функция ($ query)) use ($ ssn, $ lastfour) "

protected function validator(array $data)
{
    return Validator::make($data, [
        'name' => ['required', 'string', 'max:255'],
        'lastname' => ['required', 'string', 'max:255'],
        'username' => ['required', 'string', 'max:255', 'unique:users'],
        'ssn' => ['required', 'string', 'regex:/^[0-9]*$/','max:8', 'min:8'],
        'lastfour' => ['required', 'string', 'regex:/^[0-9]*$/','max:4', 'min:4'],
        'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
        'password' => ['required', 'string', 'min:6', 'confirmed'],
    ]);
}

я попробовал следующий код

'lastfour' => ['required', 'string', 'regex:/^[0-9]*$/','max:4', 'min:4', 
                        Rule::unique('users')->where(function ($query) use 
                        ($ssn, $lastfour){
                            return $query->where('ssn', $ssn)
                            ->where('lastfour', $lastfour);
                        })
        ],

1 Ответ

0 голосов
/ 18 февраля 2019

$ssn и $lastfour, похоже, нигде не определены.Вместо этого вы можете попробовать следующее:

protected function validator(array $data)
{
    $uniqueRule =  Rule::unique('users')->where(function ($query) use 
                    ($data){
                        return $query->where('ssn', $data['ssn']??'')
                        ->where('lastfour', $data['lastfour']??'');
                    });

    return Validator::make($data, [
        'name' => ['required', 'string', 'max:255'],
        'lastname' => ['required', 'string', 'max:255'],
        'username' => ['required', 'string', 'max:255', 'unique:users'],
        'ssn' => ['required', 'string', 'regex:/^[0-9]*$/','max:8', 'min:8',  $uniqueRule ],
        'lastfour' => ['required', 'string', 'regex:/^[0-9]*$/','max:4', 'min:4'],
        'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
        'password' => ['required', 'string', 'min:6', 'confirmed'],
    ]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...