在你的示例中。
$table->unique(['owner_id', 'promoter_id']);
数组中的第一列已经有一个外键和相关的索引。
第一选项是先放置一个还没有外键的字段,例如:
$table->unique(["key", 'owner_id', 'promoter_id']);
但这并非总是可能的。
第二种选择 - 你只需要修改
down()
函数。
例如,你可以像这样创建自己独特的索引。
$table->unique(['owner_id', 'promoter_id']);
owner_id
是现在让您困扰的字段,因为它在数组中排在第一位。因此,down
函数应该像这样:
$table->dropForeign(['owner_id']);
$table->dropUnique(['owner_id', 'promoter_id']);
$table->foreign('owner_id')->references('id')->on('owners');
第三个选项有点棘手,你的“down”函数将如下所示
$table->index('owner_id');
$table->dropUnique(['owner_id', 'promoter_id']);
它能够工作,但我不建议这样做,因为它不能完全回滚。
如果您使用索引名称records_owner_id_foreign
开始,然后执行php artisan migrate
,然后执行php artisan migrate:rollback
,那么您会发现您的索引名称变成了records_owner_id_index
。它不再是相同的索引名称。
因此,在不同的数据库中可能会有不同的索引名称,您喜欢吗?我不喜欢。
connections_owner_id_promoter_id_unique
,正如错误信息所告诉你的那样。 - Douwe de Haan$table->dropForeign('connections_owner_id_promoter_id_unique');
- Douwe de Haanconnections
drop foreign keyconnections_owner_id_promoter_id_unique
) - napalias