我有一张带有复合主键的表。我想创建一个删除该主键的迁移,并引入一个新的列'id',它是顺序的,并将成为新的主键。
Schema::table('cart_line', function (Blueprint $table) {
$table->dropPrimary('cart_line_pkey');
$table->increments('id');
$table->primary('id');
});
此代码抛出以下错误:
SQLSTATE[42P16]: Invalid table definition: 7 ERROR: multiple primary keys for table "cart_line" are not allowed (SQL: alter table "cart_line" add primary key ("id"))
如果我直接执行以下SQL,则删除主键并执行上面的代码而不会出现错误:
ALTER TABLE cart_line DROP CONSTRAINT cart_line_pkey;
这就是我尝试
的原因DB::statement('ALTER TABLE cart_line DROP CONSTRAINT cart_line_pkey;');
Schema::table('cart_line', function (Blueprint $table) {
$table->increments('id');
$table->primary('id');
});
但抛出相同的错误。旧主键不会被删除,但在尝试创建新主键之前没有错误。
我正在使用laravel 5.5和postgres 9.6
答案 0 :(得分:5)
删除$table->primary('id')
,因为 $table->increments('id')
使ID列主键
Schema::table('cart_line', function (Blueprint $table) {
$table->dropPrimary('cart_line_pkey');
$table->increments('id');
});
答案 1 :(得分:1)
您需要在单独的闭包中执行此操作,因此请尝试以下操作:
Schema::table('cart_line', function (Blueprint $table) {
$table->dropPrimary('cart_line_pkey');
});
Schema::table('cart_line', function (Blueprint $table) {
$table->increments('id');
});
问题是交易尚未提交,因此将其作为两个交易应该可以解决问题。