Laravel: обновление модели с использованием уникальных правил проверки
В Laravel проверка полей во время обновления модели имеет решающее значение для обеспечения целостности данных. Однако уникальные правила проверки могут вызвать проблемы при обновлении существующих записей.
Рассмотрим следующий код в классе репозитория:
public function update($id, $data) {
$user = $this->findById($id);
$user->fill($data);
$this->validate($user->toArray());
$user->save();
return $user;
}
Этот код пытается повторно проверить поля модели, включая уникальные поля, такие как «имя пользователя» и «адрес электронной почты». Однако этот подход может привести к ошибкам проверки при попытке обновить записи с существующими уникальными значениями.
Чтобы решить эту проблему, нам необходимо исключить текущую запись из проверки, чтобы разрешить обновления без нарушения ограничений уникальности. Мы можем добиться этого, добавив идентификатор обновляемого экземпляра в валидатор. Вот как это сделать:
Передайте идентификатор экземпляра:
Передайте идентификатор обновляемого экземпляра в метод обновления:
public function update($id, $data) {
$user = $this->findById($id);
$user->fill($data);
$this->validate($user->toArray(), ['id' => $id]);
$user->save();
}
Исключить текущую запись из проверки:
В валидаторе мы используем параметр id, чтобы определить, обновляем ли мы ресурс или создаем его:
Обновление: Для уникальных правил проверки добавьте ,{$id} к правилу, чтобы исключить текущую запись. Например:
'email' => 'unique:users,email,{$id}',
Создание: Для уникальных правил проверки не включайте идентификатор. Например:
'email' => 'unique:users,email',
Следуя этим шагам, мы можем элегантно обновляйте модели Laravel, гарантируя при этом соблюдение уникальных ограничений проверки.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3