@Kerm

Проблема с migration, как создать primery и unique ключи со своими именами?

Только начинаю познавать laravel, в migration прописал следующие строчки:

public function up()
    {
        $tableName = 'nx_path';

        Schema::create($tableName, function (Blueprint $table) {
            $table->smallInteger('id',true, true)->primary();
            $table->smallInteger('node',false, true)->unique();
            $table->string('title', 255)->default('');
            $table->string('keywords', 255)->default('');
            $table->string('description', 255)->default('');
            $table->string('path', 255)->default('');
            $table->text('anchor_pattern');
            $table->text('title_synonyms');
        });

        DB::statement("ALTER TABLE `$tableName` comment 'Ноды и их типы'");
    }


Во-первых у меня ошибка идет:

SQLSTATE[42000]: Syntax error or access violation: 1068 Multiple primary key defined (SQL: alter table `nx_path` add primary key `nx_path_id_primary`(`id`))

Во-вторых я не могу понять можно ли указать свои имена для ключей в процессе их создания?
  • Вопрос задан
  • 621 просмотр
Решения вопроса 1
glaphire
@glaphire
PHP developer
Используйте для создания id функцию bigIncrements()
$table->bigIncrements('id');
вместо
$table->smallInteger('id',true, true)->primary();
small integer обычно не используют для id) особой экономии это не даст
UPD. Разобралась с проблемой - почему получалось двойное добавление primary key:
$table->smallInteger('id', true, true)->primary();
Под капотом $table->smallInteger('id', true, true) создаст id как первичный ключ за счет флага autoIncrements = true (второй аргумент), поэтому вызов primary() создавал ключ повторно. Можно просто сделать:
$table->smallInteger('id', true, true);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы