无法将外键约束添加到数据透视表

时间:2017-09-25 11:34:41

标签: mysql database laravel laravel-migrations

我正在尝试使用外键创建数据透视表,这是我在Laravel中进行的迁移:

public function up()
{
    Schema::create('player_position', function (Blueprint $table) {
        $table->integer('player_id')->unsigned()->index();
        $table->integer('position_id')->unsigned()->index();

        $table->foreign('player_id')->references('id')->on('players')->onDelete('cascade');
        $table->foreign('position_id')->references('id')->on('positions')->onDelete('cascade');
    });
}

但是,我收到一个错误:

  

[照亮\数据库\ QueryException]
  SQLSTATE [HY000]:常规错误:1215无法添加外键约束   (SQL:alter table player_position添加约束   player_position_posi tion_id_foreign外键(position_id)   关于删除级联的参考positionsid

                                                                         [PDOException]                                                        
     

SQLSTATE [HY000]:常规错误:1215无法添加外键约束

我已经读过,通常外键约束错误是关于不将无符号分配给字段,或者已经在数据库中有记录,但是我的数据库是空的,我的字段有无符号,所以不知道是什么问题?

2 个答案:

答案 0 :(得分:0)

  

SQLSTATE [HY000]:常规错误:1215无法添加外键约束

对于要定义为if(!strcmp(ext,".JPG") || !strcmp(ext,".jpg") || !strcmp(ext, ".gif") || !strcmp(ext,".png") || !strcmp(ext, ".PNG") || !strcmp(ext, ".GIF")) { char command[1000]; snprintf(command, sizeof(command), "eog -f %s%s&", FILE_PATH, liste[counter]); if(childpid != 0) { char kill_command[100]; snprintf(kill_command, sizeof(kill_command), "kill %d", childpid); system(kill_command); childpid=0; } system(command); sleep(5); childpid = getpid() + 2; exit(EXIT_SUCCESS); } else if (!strcmp(ext,".mov") || !strcmp(ext, ".mp4") || !strcmp(ext, ".avi") || !strcmp(ext,".wmv")) { if(childpid != 0) { char kill_command[100]; snprintf(kill_command, sizeof(kill_command), "kill %d", childpid); system(kill_command); childpid=0; } char command[1000]; snprintf(command, sizeof(command), "omxplayer -o hdmi -b %s%s", FILE_PATH, liste[counter]); system(command); exit(EXIT_SUCCESS); } 的字段,引用的父字段必须在其上定义foreign key。并且列和它的大小的数据类型必须相同。

我认为你违反了上述一些规则。

答案 1 :(得分:0)

删除 - > index()方法,因为它会创建基本索引,同时您想要添加引用另一个表上的主键的外键约束。

 $table->integer('player_id')->unsigned();
 $table->integer('position_id')->unsigned();

 $table->foreign('player_id')->references('id')->on('players')->onDelete('cascade');
 $table->foreign('position_id')->references('id')->on('positions')->onDelete('cascade');