Laravel 4不能掉外键

Jos*_*hua 3 php laravel

我试图将外键放在桌子上,但我收到了这条消息:

[Illuminate\Database\QueryException]                                         
  SQLSTATE[42000]: Syntax error or access violation: 1091 Can't DROP 'user_id  
  '; check that column/key exists (SQL: alter table `posts` drop foreign key   
  user_id)   
Run Code Online (Sandbox Code Playgroud)

我正在使用迁移来执行此操作:

Schema::table('posts', function($table) {
            $table->dropForeign('user_id');
            $table->foreign('user_id')
                  ->references('id')->on('users')
                  ->onDelete('cascade');
        }); 
Run Code Online (Sandbox Code Playgroud)

我确信'posts'表中存在'user_id':

 Field      | Type             | Null | Key | Default             | Extra          |
+------------+------------------+------+-----+---------------------+----------------+
| id         | int(10) unsigned | NO   | PRI | NULL                | auto_increment |
| user_id    | int(10) unsigned | NO   | MUL | NULL                |                |
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?这是一个bug还是什么?

------------------
更新:
我发现原因可能是"你试图删除另一个表正在使用的密钥".
这是否意味着我应该放弃那些首先使用'posts'表的表?

Mar*_*lln 16

创建外键时,名称将是table_fields_foreign除非您在第二个参数中设置名称(请参阅createIndexName方法).

因此,如果您没有指定名称,则外键应该是,posts_user_id_foreign而不是user_id.

  • 请通过解决方案详细说明您的答案,它看起来更像是一个建议。我仍然无法通过您的方法来更新外键。马文 (2认同)