Laravel 7 миграция: синтаксическая ошибка или нарушение доступа: 1068 Определено несколько первичных ключей - PullRequest
1 голос
/ 03 мая 2020

при попытке выполнить php ремесленную миграцию выдает эту ошибку. Подсветка \ База данных \ QueryException

SQLSTATE [42000]: синтаксическая ошибка или нарушение доступа: 1068 Определено несколько первичных ключей (SQL: изменить таблицу users добавить первичный ключ users_user_id_primary (user_id))

Я довольно новичок в laravel tho

вот мои миграции:

Пользователь Миграция

    public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->id('user_id')->primary();
        $table->string('username')->unique();
        $table->string('email')->unique();
        $table->string('password');
    });
}

Пост-миграция

    public function up()
{
    Schema::create('posts', function (Blueprint $table) {
        $table->id('post_id');
        $table->timestamps();
        $table->string('content');
        $table->foreignId('user_id')->constrained();
        $table->primary(['post_id', 'user_id']); 


    });
}

Миграция категорий

    public function up()
{
    Schema::create('categories', function (Blueprint $table) {
        $table->id('id_cat')->primary();
        $table->string('nom');

    });
}

Миграция маркиза

    public function up()
{
    Schema::create('marques', function (Blueprint $table) {
        $table->id('marque_id');
        $table->foreignId('cat_id')->constrained();
        $table->string('designation');
        $table->primary(['marque_id','cat_id']); 
    });
}

Миграция UserMarques

    public function up()
{
    Schema::create('user_marques', function (Blueprint $table) {
        $table->foreignId('cat_id')->constrained();
        $table->foreignId('marque_id')->constrained();
        $table->timestamps();
    $table->primary(['marque_id','user_id']); 
    });
}

1 Ответ

0 голосов
/ 03 мая 2020

Используйте $table->increments('user_id'); вместо $table->id('user_id')->primary();

и с другими.

Кстати, я предпочитаю только идентификатор вместо названия модели, поэтому в этом случае я предпочитаю следующее: $table->increments('id');

Обновление для Laravel 7.x

Laravel 7.x миграция идет с методом id

public function id($column = 'id')
{
    return $this->bigIncrements($column);
}

, поэтому в этом case: вы можете использовать идентификатор как это

$table->id();

PS: ключ приращения идет с первичным ключом

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