dongwo5940
2018-06-09 14:29
浏览 86
已采纳

一般错误1215:无法添加外键约束

I'm getting the following error:

SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table subtags add constraint subtags_tag_id_foreign foreign key (tag_id) references id (tags) on delete cascade)

After looking at other answers regarding this error on stackoverflow and this blogpost: https://www.percona.com/blog/2017/04/06/dealing-mysql-error-code-1215-cannot-add-foreign-key-constraint/ I still can't figure out why I'm getting the error.

This is the migration for the subtag table:

public function up()
{
    Schema::create('subtags', function (Blueprint $table) {
        $table->engine = 'InnoDB';
        $table->integer('tag_id')->unsigned();
        $table->integer('id')->unsigned();
        $table->string('name');
        $table->timestamps();
    });

    Schema::table('subtags', function (Blueprint $table) {
        $table->foreign('tag_id')
            ->references('tags')
            ->on('id')
            ->onDelete('cascade');

        $table->primary(array('tag_id', 'id'));
    });
}

At the point of error the tag table has already been created and I can't spot any typo's but just to make sure, here is the tag table migration:

public function up()
{
    Schema::create('tags', function (Blueprint $table) {
        $table->engine = 'InnoDB';
        $table->increments('id');
        $table->string('name');
        $table->timestamps();
    });
}

图片转代码服务由CSDN问答提供 功能建议

我收到以下错误:

SQLSTATE [HY000]:常规错误:1215无法添加外键约束(SQL:alter table 子标记添加约束 subtags_tag_id_foreign 外键( tag_id )引用 删除级联上的 id tags

在stackoverflow上查看有关此错误的其他答案后 这篇博文: https://www.percona.com/blog/2017/04/06/dealing-mysql-error-code-1215-cannot-add-foreign-key-constraint/ 我仍然可以' 弄清楚为什么我收到错误。

这是子标签表的迁移:

  public function up()  
 {
 Schema :: create('subtags',function(Blueprint $ table){
 $ table-> engine ='InnoDB'; 
 $ table-&gt  ;整数('tag_id') - > unsigned(); 
 $ table->整数('id') - > unsigned(); 
 $ table-> string('name'); 
  $ table-> timestamps(); 
}); 
 
 Schema :: table('subtags',function(Blueprint $ table){
 $ table-> foreign('tag_id')
  -  >引用('tags')
  - > on('id')
  - > onDelete('cascade'); 
 
 $ table-> primary(array('tag_id','id)  ')); 
}); 
} 
   
 
 

在错误点,标签表已经创建,我无法发现任何拼写错误但是 只是为了确保,这里是标签表迁移:

  public function up()
 {
 Schema :: create('tags',function(Blueprint $ table)  ){
 $ table-> engine ='InnoDB'; 
 $ table-> incrementments('id'); 
 $ table-> string('name'); 
 $ table->  timestamps(); 
}); 
} 
   
 
  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • dongzhentiao2326 2018-06-09 15:13
    已采纳

    Your query shows that you have misplaced the column & table in:

    Schema::table('subtags', function (Blueprint $table) {
        $table->foreign('tag_id')
              ->references('tags')
              ->on('id')
              ->onDelete('cascade');
    
        $table->primary(array('tag_id', 'id'));
    });
    

    Reference should be "column" on "Table" like:

    Schema::table('subtags', function (Blueprint $table) {
        $table->foreign(id'tag_id')
              ->references('id')
              ->on('tags')
              ->onDelete('cascade');
    
        $table->primary(array('tag_id', 'id'));
    });
    
    评论
    解决 无用
    打赏 举报
  • 查看更多回答(1条)

相关推荐 更多相似问题