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 迁移的时间戳('my_col_name')返回语法错误或访问冲突:1067 'my_col_name' 的默认值无效
Laravel 6 - SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;
SQLSTATE [42000]:语法错误或访问冲突:1067'fechaNacimiento'的默认值无效-laravel