Изучение уникального правила проверки Laravel с модификатором «Except Current»

В Laravel правило проверки уникальности гарантирует уникальность указанного поля в таблице базы данных. Однако могут быть случаи, когда вы захотите исключить текущую запись из проверки уникальности. В этой статье мы рассмотрим различные методы достижения этой цели, используя модификатор «кроме текущего» в уникальном правиле проверки Laravel.

Метод 1: использование проверки запроса формы
Один из подходов — использовать проверку запроса формы Laravel. В классе запроса формы определите правила проверки следующим образом:

public function rules()
{
    return [
        'email' => [
            Rule::unique('users')->ignore($this->user()->id),
        ],
    ];
}

Объяснение:
В приведенном выше примере уникальное правило применяется к полю «электронная почта» таблицы «пользователи». Метод ignoreиспользуется для исключения текущей записи на основе идентификатора аутентифицированного пользователя ($this->user()->id).

Метод 2: указание идентификатора текущей записи вручную
Если вы не используете класс проверки запроса формы, вы можете вручную указать идентификатор текущей записи в правилах проверки:

$userId = Auth::id();
$rules = [
    'email' => Rule::unique('users')->ignore($userId),
];
$request->validate($rules);

Объяснение:
Здесь мы получаем идентификатор текущего пользователя, используя Auth::id(). Затем мы передаем этот идентификатор методу ignoreуникального правила, чтобы исключить текущую запись из проверки.

Метод 3: настраиваемое правило проверки
Другой подход заключается в создании настраиваемого правила проверки, которое инкапсулирует проверку уникальности с логикой «кроме текущего». Сначала создайте новое правило с помощью команды Artisan:

php artisan make:rule UniqueExceptCurrent

Затем откройте сгенерированный файл правил и реализуйте метод passes:

public function passes($attribute, $value)
{
    $userId = Auth::id();
    return !DB::table('users')
        ->where('email', $value)
        ->where('id', '!=', $userId)
        ->exists();
}

Объяснение:
В этом методе мы создаем собственное правило проверки с именем UniqueExceptCurrent. В методе passesмы получаем идентификатор текущего пользователя, используя Auth::id(). Затем мы вручную запрашиваем таблицу «Пользователи», исключая текущую запись на основе идентификатора пользователя и проверяя наличие других записей с тем же адресом электронной почты.

В этой статье мы рассмотрели различные методы проверки уникальности в Laravel, исключая текущую запись. Мы обсудили использование проверки запроса формы, указание текущего идентификатора записи вручную и создание настраиваемого правила проверки. Включив эти методы в свои проекты Laravel, вы сможете обеспечить целостность данных и предотвратить дублирование записей.

Не забудьте настроить правила проверки и имена таблиц в соответствии с вашим конкретным вариантом использования. Приятного программирования с Laravel!