【发布时间】:2019-12-08 10:29:56
【问题描述】:
我正在尝试为名为@987654322@ 的表创建第二个名为order 的自动递增列。我正在创建这个自动递增列,因为我使用的是 jQuery 可排序的,并且您可以更改帖子的顺序。但不幸的是,我收到了这个错误。
1075 表定义不正确;只能有一个自动列,并且必须定义为一个键
我试过$table->increments('order')->unique();,但这就是给我错误的原因。我还尝试创建一个外键约束,其中order 列将引用同一个表中的“id”列。我还尝试让 order 参数可填充到我的模型中。
这是我的迁移。
帖子迁移
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id');
$table->string('title');
$table->text('body');
$table->timestamps();
});
第二次帖子迁移
Schema::table('posts', function (Blueprint $table) {
$table->increments('order')->unique();
});
预期的结果是,当迁移迁移时,它会在posts 表中创建一个名为order 的新列。这个新列应该是自动递增的。如果您需要更多信息,请不要害怕询问。
提前感谢您的帮助。
【问题讨论】:
-
您的用例是什么?我的意思是,让我们假设
order列也是“自动增量的”。所以,现在你的id和order列在每条记录上都在增加。你为什么需要这个?顺序将保持与id或order相同的排序,不是吗?您希望以哪种方式更改帖子的排序方式? -
订单栏会按照它说的做,改变帖子的顺序。而 ID 将是主键。假设我发了两个帖子。帖子一:ID:1,订单:1。帖子二:ID:2,订单:2。
-
好的...(?)。所以,如果
order和id具有相同的值.. 为什么不使用id列进行排序?这将为您提供完全相同的结果。无需复制数据(两个相等的列)。另一种选择是在模型中创建一个等于 id 值的访问器,而无需将值存储在数据库中。 -
现在我将为每个帖子制作 cmets,但我仍然使用帖子 ID 作为主键。基本上,如果我将一个帖子的 ID 与另一个帖子交换,就会出现问题,因为现在你有一个帖子的 cmets 现在转移到另一个帖子,如果这有意义的话。但是如果我只更改订单号,则不会相互交换任何数据,我们只是更改了一个数字。
-
我刚看了你的评论,我会试试的
标签: php laravel laravel-5 laravel-migrations