【发布时间】:2016-03-29 18:03:34
【问题描述】:
尝试进行迁移以删除组合的唯一键失败且没有错误。
我使用php artisan make:migration 创建了一个迁移并编辑了代码。所以我有这个
public function up()
{
Schema::table('ques_trilha_itens', function (Blueprint $table) {
$table->dropUnique('trilha_itens_trilha_id_questao_id_unique');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('ques_trilha_itens', function (Blueprint $table) {
$table->unique(['trilha_id', 'questao_id']);
});
}
字符串'trilha_itens_trilha_id_questao_id_unique' 是在MySQL 中显示为组合唯一键的字符串。所以我认为要使用该字符串确实删除两个组合键。
但是在运行php artisan migrate时,什么都没有发生,没有错误信息,也没有执行迁移。
我尝试将dropUnique 中的字符串替换为表的名称作为第一项 ('ques_trilha_itens_trilha_id_questao_id_unique'),但什么也没有。
我错过了什么吗?
更新:
MySQL 命令SHOW CREATE TABLE ques_trilha_itens 给:
CREATE TABLE `ques_trilha_itens` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`trilha_id` int(10) unsigned NOT NULL,
`questao_id` int(10) unsigned NOT NULL,
`primeiro_item` tinyint(1) NOT NULL,
`item_principal_id` int(10) unsigned DEFAULT NULL,
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`chave` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `trilha_itens_trilha_id_questao_id_unique` (`trilha_id`,`questao_id`),
UNIQUE KEY `ques_trilha_itens_chave_unique` (`chave`),
KEY `trilha_itens_questao_id_foreign` (`questao_id`),
KEY `ques_trilha_itens_item_principal_id_foreign` (`item_principal_id`),
CONSTRAINT `ques_trilha_itens_item_principal_id_foreign` FOREIGN KEY (`item_principal_id`) REFERENCES `ques_trilha_itens` (`id`) ON DELETE SET NULL,
CONSTRAINT `trilha_itens_trilha_id_foreign` FOREIGN KEY (`trilha_id`) REFERENCES `ques_trilhas` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
【问题讨论】:
-
你试过了吗>> dropForeign().问题是 ->dropUnique 在列名上。 dropForeign() 在关系上
-
是的,没有成功。但我想要的是撤消唯一键而不是外键。 dropUnique 也在关系中。
-
使用
SHOW CREATE TABLE <Table Name>获取应该传递给dropUnique() 的实际约束名称。 -
感谢@Vikas,问题已更新。
-
根据
SHOW CREATE TABLE的结果,您使用的约束名称是正确的,所以它应该可以工作。运行composer dump-autoload或尝试在上述迁移中添加一列,以验证此迁移是否正在运行。
标签: php mysql laravel-5 artisan-migrate