Освоение составных уникальных ключей в Laravel: обеспечение целостности данных

Метод 1: определение составных уникальных ключей при миграции
Чтобы создать составной уникальный ключ в Laravel, вы можете использовать метод uniqueв файле миграции. Просто укажите массив имен столбцов в вызове метода unique, чтобы определить составной ключ. Например:

public function up()
{
    Schema::table('users', function (Blueprint $table) {
        $table->unique(['email', 'phone']);
    });
}

Метод 2: использование Fluent Query Builder
Другой метод обеспечения соблюдения составных уникальных ключей — использование Fluent Query Builder. Вы можете связать метод uniqueс экземпляром построителя запросов, передав массив имен столбцов для определения составного ключа. Вот пример:

DB::table('users')
    ->where('type', 'admin')
    ->unique(['email', 'phone'])
    ->update(['active' => true]);

Метод 3: определение составных уникальных ключей в моделях Eloquent
С помощью Eloquent вы можете указывать составные уникальные ключи непосредственно в методе bootвашей модели. Используйте событие savingдля проверки и обеспечения уникальности полей составного ключа. Вот пример:

class User extends Model
{
    protected static function boot()
    {
        parent::boot();
        static::saving(function ($user) {
            $existing = User::where('email', $user->email)
                ->where('phone', $user->phone)
                ->count();
            if ($existing > 0) {
                throw new \Exception('Composite unique key violation');
            }
        });
    }
}

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

public function up()
{
    Schema::table('users', function (Blueprint $table) {
        $table->index(['email', 'phone']);
    });
}

В этой статье мы рассмотрели несколько методов реализации составных уникальных ключей в Laravel. Независимо от того, решите ли вы определить их при миграции, использовать Fluent Query Builder, модели Eloquent или создать составные индексы, цель остается той же: обеспечение целостности данных и предотвращение дублирования записей. Используя эти методы, вы можете поддерживать надежную структуру базы данных и обеспечивать бесперебойную работу ваших пользователей.