Метод 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 или создать составные индексы, цель остается той же: обеспечение целостности данных и предотвращение дублирования записей. Используя эти методы, вы можете поддерживать надежную структуру базы данных и обеспечивать бесперебойную работу ваших пользователей.