Laravel 7 迁移:语法错误或访问冲突:1068 定义了多个主键

Posted

技术标签:

【中文标题】Laravel 7 迁移:语法错误或访问冲突:1068 定义了多个主键【英文标题】:Laravel 7 migration :Syntax error or access violation: 1068 Multiple primary key defined 【发布时间】:2020-08-17 22:13:26 【问题描述】:

当我尝试执行 php artisan migrate 时,它​​给了我这个错误 照亮\数据库\查询异常

SQLSTATE[42000]:语法错误或访问冲突:1068 定义了多个主键(SQL:alter table users add primary key users_user_id_primary(user_id))

我对 laravel 还是很陌生

这是我的迁移:

用户迁移

    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']); 
    );

【问题讨论】:

删除primary(),只留下id()。乐:$table->id('user_id'); 【参考方案1】:

使用$table->increments('user_id'); 而不是$table->id('user_id')->primary();

和其他人一起。

顺便说一句,我更喜欢只有 id 而不是型号名称,所以在这种情况下我更喜欢这个: $table->increments('id');

Laravel 7.x 更新

Laravel 7.x 迁移自带 id 方法

public function id($column = 'id')

    return $this->bigIncrements($column);

所以在这种情况下:你可以像这样使用 id

$table->id();

PS:增量键自带主键

【讨论】:

哦,但是增量和 id 之间有什么区别? id 自带 laravel 7,id 提供给你 bigIncrement,这个也可以。我会更新我的答案

以上是关于Laravel 7 迁移:语法错误或访问冲突:1068 定义了多个主键的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 迁移错误:语法错误或访问冲突:1071 指定的键太长;最大密钥长度为 767 字节 laravel 5.3

Laravel 5.8:总是给出多个主键语法或访问冲突错误

为啥 laravel 迁移的时间戳('my_col_name')返回语法错误或访问冲突:1067 'my_col_name' 的默认值无效

Laravel 6 - SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;

SQLSTATE [42000]:语法错误或访问冲突:1067'fechaNacimiento'的默认值无效-laravel

Laravel SQLSTATE[42000]:语法错误或访问冲突:1064