Несколько первичных ключей с одним автоматическим приращением laravel - PullRequest
0 голосов
/ 02 июня 2019

Мне нужно перенести эту базу данных с Laravel на MySQL, но, похоже, я не могу использовать несколько первичных ключей для элементов автоинкрементов.

 public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->bigIncrements('user_id');
        $table->string('name');
        $table->string('surname');
        $table->string('email')->unique();
        $table->string('tel');
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
    });

    Schema::create('collections', function (Blueprint $table) {
        $table->unsignedBigInteger('user_id');
        $table->foreign('user_id')->references('user_id')->on('users');
        $table->bigIncrements('collection_id');

        $table->primary(['user_id', 'collection_id']);
        $table->string('title');
        $table->string('img_url');
        $table->timestamps();
    });

    Schema::table('collections', function (Blueprint $table) {
        $table->dropPrimary('collections_collection_id_fk_primary');
    });

    Schema::create('contents', function (Blueprint $table) {
        $table->unsignedBigInteger('collection_id');
        $table->foreign('collection_id')->references('collection_id')->on('collections');
        $table->bigIncrements('content_id');

        $table->primary(['content_id', 'collection_id']);
        $table->string('title');
        $table->string('author');
        $table->string('publisher');
        $table->string('pages');
        $table->string('google_id');
        $table->string('img_url');
        $table->timestamps();
    });


Schema::table('collections', function (Blueprint $table){
    $table->dropPrimary('contents_content_id_fk_primary');
});
}

Я пытался использовать dropPrimary, но это не такt выполнить запрос, потому что он останавливается на ошибке: " Illuminate \ Database \ QueryException: SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1068 Определено несколько первичных ключей (SQL: изменить таблицу collections добавить первичный ключ collections_user_id_collection_id_primary (user_id, collection_id))"

Вы можете мне помочь?

1 Ответ

1 голос
/ 19 июня 2019

TLDR: Следующее определение столбца уже автоматически создает первичный ключ:

$table->bigIncrements('collection_id');

Поэтому ваш явный вызов $ table-> primary () пытается создать второй первичный ключ.

Длинный ответ

Я столкнулся с подобной проблемой.У меня был составной первичный ключ на двух столбцах, который вызывал проблемы, когда я начинал ставить задания в очередь, потому что фреймворк сериализовал только $ primaryKey модели (вы не можете определить два столбца как $ primaryKey в моделях. Поэтому я добавил первичное автоматическое увеличениестолбец миграции:

$this->bigIncrements('id')->primary();

Это вызвало сообщение об ошибке, которое вы получаете. После удаления вызова primary () это сработало, и я заметил, что первичный ключ был установлен автоматически. Вместо этого я сейчас используюсоставной уникальный ключ:

$table->unique(['column_a', 'column_b']);

Надеюсь, это поможет в вашем случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...