Уникальная проблема проверки поля в laravel

Я пытаюсь проверить уникальную запись в моем приложении laravel

Ниже приведен мой массив проверки,

$website = $websiteModel->find($id);

        $this->validate($request, [
            'subDomainName' => ['required','regex:/^[A-Za-z0-9 ]+$/'],
            'subDomainSuffix' => ['required'], 
            'packageType' => ['required'],
            'themeid' => ['required'],
            'lang' => ['required'],
            'user' => ['required'],
            'domain' => [
                'required',
                'string',
                'min:2',
                'max:255',
                Rule::unique('apps')->ignore($website)
            ],
        ], $request->all());

Моя проверка работает правильно, НО,

Когда я попытался ввести повторяющееся значение для поля моего домена, оно было проверено правильно, но не показало сообщение об ошибке, извиняясь, что имя уже существует ...

<input type="text" id="domain" class="form-control" name="domain" >
{!! $errors->first('domain', '<span class="help-block" role="alert">:message</span>') !!}

Здесь, в этом диапазоне, он ничего не показывает, но в области общих сообщений об ошибках он показывает, что форма не может быть обновлена ​​... Итак, как я могу правильно проверить поле и отобразить соответствующее сообщение об ошибке


person Volka Dimitrev    schedule 20.04.2020    source источник


Ответы (4)


Сделайте что-нибудь вроде этого:

По запросу вставки используйте

'domain' => [
   ...
   'unique:websites,domain'
]

По запросу на обновление используйте

'domain' => [
   ...
   "unique:websites,domain,{$this->website->id}"
]

Or

'domain' => [
   ...
   Rule::unique('websites', 'domain')->ignore($this->website)
]
person Adam Pery    schedule 20.04.2020
comment
внес небольшое изменение в ваш ответ, в строке обновления ваш код дал мне ошибку, поэтому я изменил его на Rule :: unique ('apps', 'domain') - ›ignore ($ website), и это сработало для меня . :). Спасибо за руководство. - person Volka Dimitrev; 20.04.2020

Вы передали $ request-> all () в качестве сообщений проверки. Пожалуйста, попробуй:

$website = $websiteModel->find($id);

        $request->validate([
            'subDomainName' => ['required','regex:/^[A-Za-z0-9 ]+$/'],
            'subDomainSuffix' => ['required'], 
            'packageType' => ['required'],
            'themeid' => ['required'],
            'lang' => ['required'],
            'user' => ['required'],
            'domain' => [
                'required',
                'string',
                'min:2',
                'max:255',
                Rule::unique('apps')->ignore($website)
            ],
        ]);
person Mohammad Hosseini    schedule 20.04.2020

Разве вам не нужно передавать повторяющийся столбец в Правиле игнорирования Чтобы указать валидатору игнорировать домен веб-сайта, кроме самого себя? например как

Rule::unique('apps')->ignore($website->id)
person Khairu Aqsara    schedule 20.04.2020

Примерьте вот это . это помогает решить вашу проблему

использовать исключение и валидатор в верхней части файла

use Exception;
use Validator;

$rules = [
                'subDomainName' => 'required|unique:sub_domain_name',
            ];

            $validator = Validator::make($request->all(), $rules, $message);
            if ($validator->fails()) {
                throw new Exception(implode('\n', $validator->errors()->all()));
            }

sub_domain_name: это имя столбца базы данных

person PHP Geek    schedule 20.04.2020