Уникальное ограничение в laravel по нескольким полям

#php #laravel #laravel-8

Вопрос:

У меня есть этот стол :

введите описание изображения здесь

В коде, который я ввел :

     $id = request()->route()->parameter('keyword')?->id;
    return [
        'key'  => ['required', 'unique:keywords,key,project_page_id,'.$id],
    ];
 

Если я попытаюсь добавить новый элемент с ключом addButton и project_page_id = 5 , я получу ошибку 422 с сообщением : The key has already been taken. . Я хочу иметь уникальный key идентификатор по project_page_id, как я могу до этого добраться ?

Ответ №1:

Laravel имеет объекты проверки, где вы получаете более мощные возможности. У него есть уникальный объект проверки, и вы можете настроить запрос, где, как мне кажется, вам нужна следующая логика, чтобы также проверить наличие project_page_id .

 'key'  => ['required', (new Unique('keywords', 'id'))->where('project_page_id', $id)],
 

Комментарии:

1. Я поставил так : ['required', (new Unique('keywords', 'id'))->where('project_page_id', $id)] . Не работает, теперь я могу дублировать ключи для одного или другого project_page_id

2. Какова стоимость dd($id); ?

3. имеет значение null для добавления и идентификатора в случае редактирования

4. Но я считаю, что если вы можете создать дубликат идентификатора страницы проекта, этот идентификатор в этих случаях будет равен нулю