我正在尝试使用外键创建数据透视表,这是我在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 tableplayer_position
添加约束player_position_posi tion_id_foreign
外键(position_id
) 关于删除级联的参考positions
(id
)[PDOException]
SQLSTATE [HY000]:常规错误:1215无法添加外键约束
我已经读过,通常外键约束错误是关于不将无符号分配给字段,或者已经在数据库中有记录,但是我的数据库是空的,我的字段有无符号,所以不知道是什么问题?
答案 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');