Валидация Laravel 8: уникальное правило для двух столбцов

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

Метод 1: использование правила уникальности с замыканием
Вы можете использовать правило проверки uniqueи предоставить замыкание, чтобы указать столбцы, которые должны быть уникальными.

use Illuminate\Validation\Rule;
public function rules()
{
    return [
        'column1' => [
            'required',
            Rule::unique('table')->where(function ($query) {
                return $query->where('column2', $this->column2);
            }),
        ],
    ];
}

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

use Illuminate\Validation\Rule;
public function rules()
{
    return [
        'column1' => [
            'required',
            Rule::unique('table')->where(function ($query) {
                return $query->where('column2', $this->column2)
                             ->where('column3', $this->column3);
            }),
        ],
    ];
}

Метод 3. Пользовательское правило проверки.
Другой подход — создать собственное правило проверки для проверки уникальности двух столбцов.

use Illuminate\Contracts\Validation\Rule;
public function rules()
{
    return [
        'column1' => [
            'required',
            new CustomUniqueRule('table', 'column2', 'column3'),
        ],
    ];
}
use Illuminate\Contracts\Validation\Rule;
use Illuminate\Support\Facades\DB;
class CustomUniqueRule implements Rule
{
    protected $table;
    protected $column2;
    protected $column3;
    public function __construct($table, $column2, $column3)
    {
        $this->table = $table;
        $this->column2 = $column2;
        $this->column3 = $column3;
    }
    public function passes($attribute, $value)
    {
        $count = DB::table($this->table)
            ->where($attribute, $value)
            ->where($this->column2, $this->column3)
            ->count();
        return $count === 0;
    }
    public function message()
    {
        return 'The :attribute has already been taken.';
    }
}

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

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

Реализуя эти методы, вы можете обеспечить уникальность значений в двух столбцах в Laravel 8, предоставляя надежный механизм проверки данных для ваших приложений.