Изучение уникальных запросов Laravel с двумя столбцами: подробное руководство

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

Метод 1: использование уникального правила
Самый простой способ проверить уникальность двух столбцов в Laravel — использовать правило uniqueв логике проверки. Давайте рассмотрим сценарий, в котором у нас есть таблица usersсо столбцами emailи username, и мы хотим убедиться, что оба значения уникальны. Вот пример того, как мы можем этого добиться:

public function rules()
{
    return [
        'email' => 'required|email|unique:users',
        'username' => 'required|unique:users'
    ];
}

Метод 2: определение специального правила проверки
Иногда одного уникального правила проверки может быть недостаточно для сложных сценариев. В таких случаях мы можем создать собственное правило проверки, которое проверяет уникальность двух столбцов одновременно. Вот пример:

public function rules()
{
    return [
        'email' => [
            'required',
            'email',
            function ($attribute, $value, $fail) {
                $username = $this->input('username');
                $count = User::where('email', $value)
                             ->where('username', $username)
                             ->count();
                if ($count > 0) {
                    $fail("The combination of email and username is already taken.");
                }
            }
        ]
    ];
}

Метод 3: использование класса запроса формы
Чтобы сохранить наш код чистым и организованным, мы можем использовать класс запроса формы Laravel для инкапсуляции правил проверки для нашего уникального сценария с двумя столбцами. Вот пример:

class UserRequest extends FormRequest
{
    public function rules()
    {
        return [
            'email' => 'required|email|unique_two_columns:users,username',
        ];
    }
}