РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
350 of 1392 menu

Метод unique

Метод unique вызывается на объекте Blueprint в миграции Laravel. Он создаёт индекс уникальности для указанных колонок. Если метод вызывается для одной колонки, то уникальным будет её значение. Если передаётся массив колонок, уникальность гарантируется для комбинации их значений. При попытке вставки или обновления записи с дублирующимся значением в колонке с уникальным индексом будет выброшено исключение.

Синтаксис

<?php // Для одной колонки: $table->unique($column, $name); // Для нескольких колонок: $table->unique([$column1, $column2], $name); ?>

Параметр $column (или массив колонок) обязателен. Второй параметр $name - необязательное имя индекса. Если имя не указано, Laravel сгенерирует его автоматически по схеме: table_column1_column2_unique.

Пример

Добавим уникальный индекс для колонки email в таблице users:

<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { public function up(): void { Schema::create('users', function (Blueprint $table) { $table->id(); $table->string('email'); $table->string('name'); $table->unique('email'); $table->timestamps(); }); } }; ?>

После выполнения миграции, попытка создать двух пользователей с одинаковым email вызовет ошибку.

Пример

Создадим уникальный составной индекс для колонок product_id и color_id в таблице product_colors:

<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { public function up(): void { Schema::create('product_colors', function (Blueprint $table) { $table->id(); $table->unsignedBigInteger('product_id'); $table->unsignedBigInteger('color_id'); $table->unique(['product_id', 'color_id']); $table->timestamps(); }); } }; ?>

Теперь одна и та же комбинация товара и цвета не может быть добавлена дважды.

Пример

Создадим уникальный индекс с пользовательским именем для колонки phone:

<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { public function up(): void { Schema::table('users', function (Blueprint $table) { $table->string('phone')->nullable(); $table->unique('phone', 'users_phone_unique'); }); } }; ?>

В этом случае создаётся индекс с явно заданным именем users_phone_unique, что может быть удобно для управления индексами в будущем.

Пример

Удалим уникальный индекс с колонки email:

<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { public function up(): void { Schema::table('users', function (Blueprint $table) { $table->dropUnique('users_email_unique'); }); } }; ?>

Метод dropUnique принимает имя индекса, которое можно узнать в базе данных или сгенерировать по стандартному шаблону Laravel.

Смотрите также

  • метод index,
    который создаёт обычный индекс для ускорения поиска
  • метод primary,
    который создаёт первичный ключ таблицы
  • метод foreign,
    который создаёт внешний ключ для связи таблиц
  • метод dropColumn,
    который удаляет колонку из таблицы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить