Laravel Правило проверки не выполняется при попытке обновить ту же запись без изменений - PullRequest
1 голос
/ 18 февраля 2020

У меня есть таблица с именем Sides, которая состоит из id, name, side_category_id и некоторых других полей, не важных на данный момент.

Я хотел проверить это при создании новая запись side, запись еще не существует. Итак, допустим, у меня есть в базе данных запись, такая как:

id: 1
name: Salad
side_category_id: 3

Если я попытаюсь вставить новую запись с name = 'salad' и side_category_id = 3, то создание должно завершиться неудачно и вернуть ошибку .

Я достиг этого, используя следующее правило:

$rules = [
   'name'             => 'required',
   'side_category_id' => 'required|exists:side_categories,id|unique:sides,side_category_id,NULL,id,name,' . $this->request->get('name')
]

Пока все хорошо. Это работает как положено. Но теперь возвращается ошибка, если я хочу отредактировать запись и сохранить ее без каких-либо изменений, а это не мой желаемый результат.

Если я пытаюсь обновить запись без изменений, это должно произойти. Как я могу обновить свое правило для достижения этого?

1 Ответ

1 голос
/ 18 февраля 2020

вы можете использовать Rule :: unique ()

для создать использовать вот так

$rules = [
   'name'             => ['required'],
   'side_category_id' => ['required',Rule::unique('sides', 'name')->where(function ($query) use($category_id) {
    return $query->where('side_category_id', $category_id);
}),Rule::exists('side_categories')]
]

для update

$rules = [
       'name'             => ['required'],
       'side_category_id' => ['required',Rule::unique('sides', 'name')->where(function ($query) use($category_id) {
        return $query->where('side_category_id', $category_id);
    })->ignore($id),Rule::exists('side_categories')]
    ]
//$id should be you parameter
...