删除外键的问题

2022-08-30 14:33:28

我的外键与它自己的表有关。这是为了产生具有层次结构的职位

现在,当我尝试删除数据库中的列时,它给我这个错误:

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并删除外键本身。,然后删除该列。


答案 1

我刚刚为我自己的项目弄清楚了这一点。删除外键时,需要连接表名和约束中的列,然后在名称后缀“_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');
        });
}

答案 2

操作方法如下:

  1. 登录到数据库并查找外键关系的名称。如果您使用phpmyadmin,请转到表格,单击“结构”选项卡,单击“关系视图”链接

重要说明:要查看“关系视图”,请确保您的表“存储引擎”如果不是,请查看此问答InnoDB

并等待几秒钟以加载它。搜索“约束名称”字段。在我的例子中,这是:“contribution_copyright_id_foreign”

  1. 转到 Laravel 迁移脚本(或创建一个)。诀窍是首先删除外键关系,然后删除列。

    公共函数 down()

    {

         Schema::table('contribution', function(Blueprint $table){
    
             $table->dropForeign('contribution_copyright_id_foreign');
    
             $table->dropColumn('copyright_id');
    
         });
    

如果要删除存在外键的表,则还必须首先删除外键关系。

从这里复制

希望它能帮助别人


推荐