Вот мои правила в моем классе:
class AppointmentsController extends Controller
{
protected $rules = [
'appointment' => ['required', 'min:5'],
'slug' => ['required', 'unique:appointments'],
'description' => ['required'],
'date' => ['required', 'date_format:"Y-m-d H:i"'],
];
Это в официальных документах Laravel:
Иногда вы можете игнорировать данный идентификатор во время уникальной проверки.
Например, рассмотрим экран «Обновить профиль», который включает
имя пользователя, адрес электронной почты и местоположение. Конечно, вы захотите
убедитесь, что адрес электронной почты является уникальным. Однако, если пользователь только
изменяет поле имени, а не поле электронной почты, вы не хотите
будет выдана ошибка проверки, потому что пользователь уже является владельцем
адрес электронной почты. Вы хотите выдать ошибку проверки, только если
Пользователь предоставляет адрес электронной почты, который уже используется другим
пользователь. Чтобы указать уникальное правило игнорировать идентификатор пользователя, вы можете передать
идентификатор в качестве третьего параметра:
'email' => 'unique:users,email_address,'.$user->id.',user_id'
Я попытался использовать это в моих правилах:
'slug' => ['required', 'unique:appointments,id,:id'],
Это действительно игнорирует текущую строку, НО это игнорирует это полностью. Что я хочу сделать, так это то, что я хочу, чтобы он игнорировал текущую строку, только если слаг не изменился. Когда он изменяется на что-то, что уже является уникальным в другой строке, я хочу, чтобы оно выдало ошибку.
Уникальный валидатор работает так
unique:table,column,except,idColumn
Так что в вашем случае вы можете сделать это так:
Получить идентификатор, который вы хотите проверить, вы можете получить его по маршруту или любым другим способом, который вам подходит; что-то вроде того
$id = $this->route('id');
'slug' => ['required','unique:appointments,slug,'.$id],
Других решений пока нет …