我的外键与自己的表有关。这是为了生成具有层次结构的帖子。
现在,当我尝试删除数据库中的列时,它会给我这个错误:
1553 - Cannot drop index 'post_field_properties_parent_id_index': needed in a foreign key constraint
这是代码:
public function down()
{
Schema::table( "post_field_properties", function( $table )
{
$table->dropForeign('parent_id');
$table->dropColumn('parent_id');
} );
}
我似乎能够做到的唯一方法是转到phpmyadmin并删除外键本身。然后放下列。
答案 0 :(得分:17)
刚刚为我自己的项目想出了这个。删除外键时,需要连接约束中的表名和列,然后将名称后缀为“_ foreign”
http://laravel.com/docs/5.1/migrations#foreign-key-constraints
public function down()
{
Schema::table( "post_field_properties", function( $table )
{
$table->dropForeign('post_field_properties_parent_id_foreign');
$table->dropColumn('parent_id');
});
}
答案 1 :(得分:3)
以下是如何操作:
1)登录到您的数据库并查找外键关系的名称。如果您使用phpmyadmin,请转到表格,单击“结构”选项卡,单击“关系视图”链接并等待几秒钟以加载它。搜索“约束名称”字段。在我的示例中,这是:“contribution_copyright_id_foreign”
2)转到Laravel迁移脚本(或创建一个)。诀窍是首先删除外键关系,然后删除列。
public function down()
{
Schema::table('contribution', function(Blueprint $table){
$table->dropForeign('contribution_copyright_id_foreign');
$table->dropColumn('copyright_id');
});
如果要删除存在外键的表,首先还必须删除外键关系。
从here
复制希望有人帮助
答案 2 :(得分:1)
尝试在列名的末尾放置“_foreign”。例如:
public function down()
{
Schema::table( "post_field_properties", function( $table )
{
$table->dropForeign('parent_id_foreign');
$table->dropColumn('parent_id');
});
}
答案 3 :(得分:0)
要检查外键的名称,请先将数据库备份到.sql
在那里你会看到你的外键名称:
...
KEY `employees_parent_id_foreign` (`parent_id`),
CONSTRAINT `employees_parent_id_foreign` FOREIGN KEY (`parent_id`) REFERENCES `laravel_article` (`id`) ON DELETE CASCADE
...
在我的情况下是 laravel 5.4 , 它以这种格式开头: tablename_columnname_foreign
所以在你的laravel(这里我尝试从员工表中删除外键)
Schema::table("employees", function( $table )
{
$table->dropForeign('employees_parent_id_foreign');
$table->dropColumn('parent_id');
});