Проблема проверки уникального поля в laravel - PullRequest
1 голос
/ 20 апреля 2020

Я пытаюсь проверить уникальную запись в моем 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>') !!}

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

Ответы [ 4 ]

1 голос
/ 20 апреля 2020

Сделайте что-то вроде этого:

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

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

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

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

Или

'domain' => [
   ...
   Rule::unique('websites', 'domain')->ignore($this->website)
]
0 голосов
/ 20 апреля 2020

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

Rule::unique('apps')->ignore($website->id)
0 голосов
/ 20 апреля 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: это имя столбца базы данных

0 голосов
/ 20 апреля 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)
            ],
        ]);
...