Метод primary
Метод primary класса Blueprint применяется в миграциях для назначения первичного ключа для таблицы. Первым параметром передаётся имя столбца или массив имён столбцов для составного ключа, вторым параметром можно указать имя индекса. Если не указан второй параметр, имя индекса будет сгенерировано автоматически.
Этот метод следует использовать только в том случае, если вы не хотите использовать автоматически создаваемый столбец id. Чаще всего для первичного ключа используют метод id, который создаёт автоинкрементный столбец и автоматически назначает его первичным ключом.
Синтаксис
<?php
Schema::table('table_name', function (Blueprint $table) {
$table->primary($columns, $indexName);
});
?>
Пример
Создадим таблицу 'users' с пользовательским первичным ключом 'user_id':
<?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->unsignedBigInteger('user_id');
$table->primary('user_id');
$table->string('name');
$table->string('email')->unique();
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('users');
}
};
?>
Пример
Создадим составной первичный ключ из столбцов 'user_id' и 'role_id' для таблицы 'user_roles':
<?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('user_roles', function (Blueprint $table) {
$table->unsignedBigInteger('user_id');
$table->unsignedBigInteger('role_id');
$table->primary(['user_id', 'role_id']);
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('user_roles');
}
};
?>
Пример
Добавим первичный ключ на существующую таблицу 'products' для столбца 'product_code':
<?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('products', function (Blueprint $table) {
$table->primary('product_code');
});
}
public function down(): void
{
Schema::table('products', function (Blueprint $table) {
$table->dropPrimary('products_product_code_primary');
});
}
};
?>
Смотрите также
-
метод
index,
который создаёт обычный индекс для ускорения поиска -
метод
unique,
который создаёт уникальный индекс с проверкой на дубликаты -
метод
foreign,
который определяет внешний ключ для связей между таблицами -
метод
dropColumn,
который удаляет столбец из таблицы