Метод 1: использование правила проверки unique
use Illuminate\Validation\Rule;
$request->validate([
'title' => [
'required',
Rule::unique('your_table')->ignore($id),
],
]);
В этом методе вы можете использовать правило проверки Rule::unique, чтобы указать имя таблицы (your_table) и идентификатор ($id), который вы хотите исключить из проверки уникальности.
Метод 2. Пользовательское правило проверки с использованием замыкания
use Illuminate\Support\Facades\Validator;
$validator = Validator::make($request->all(), [
'title' => [
'required',
function ($attribute, $value, $fail) use ($id) {
$exists = DB::table('your_table')
->where('title', $value)
->where('id', '!=', $id)
->exists();
if ($exists) {
$fail('The title has already been taken.');
}
},
],
]);
if ($validator->fails()) {
// Handle validation errors
}
Этот метод позволяет вам определить собственное правило проверки с помощью замыкания. Внутри замыкания вы можете вручную проверить, существует ли заголовок в таблице (your_table), за исключением указанного идентификатора ($id).
Метод 3. Использование уникального правила с условиями запроса
use Illuminate\Validation\Rule;
$request->validate([
'title' => [
'required',
Rule::unique('your_table')->where(function ($query) use ($id) {
$query->where('id', '!=', $id);
}),
],
]);
В этом методе вы можете использовать метод whereправила unique, чтобы указать дополнительные условия запроса. В этом случае мы проверяем наличие условия id != $id, чтобы исключить указанный идентификатор из проверки уникальности.
Это всего лишь несколько примеров того, как можно обеспечить уникальность заголовка в Laravel, исключив при этом идентификатор в процессе редактирования. Выберите метод, который соответствует вашим требованиям и стилю реализации.