在使用laravel migration时尝试创建外键
就像这个例子:
用户表
public function up()
{
Schema::create('flights', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->TinyInteger('color_id')->unsigned();
$table->foreign('color_id')->references('id')->on('colors');
$table->timestamps();
});
}
颜色表
public function up()
{
Schema::create('flights', function (Blueprint $table) {
$table->increments('id');
$table->string('color');
$table->timestamps();
});
}
有时属性不起作用
[PDOException]
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint
答案 0 :(得分:0)
为了使外键约束起作用,除了具有相同的列类型之外,父列也应该是(或形成)主键或者应该有index
。阅读文档here:
InnoDB允许外键引用任何列或组 列。但是,在引用的表中,必须有一个索引 其中引用的列被列为的第一列 同样的顺序。
在你的情况下,它可能没有索引,因此失败了。
答案 1 :(得分:0)
发生此错误是因为[用户表]中的外键(类型)与[颜色表]中的主键(类型)不同
要解决此问题,应更改[colors table]
中的主键 $table->tinyIncrements('id');
使用主键$table->Increments('id');
您应该使用Integer
作为外键
$table-> unsignedInteger('fk_id');
$table->foreign('fk_id')->references('id')->on('table_name');
使用主键$table->tinyIncrements('id');
您应该使用unsignedTinyInteger
作为外键
$table-> unsignedTinyInteger('fk_id');
$table->foreign('fk_id')->references('id')->on('table_name');
使用主键$table->smallIncrements('id');
您应该使用unsignedSmallInteger
作为外键
$table-> unsignedSmallInteger('fk_id');
$table->foreign('fk_id')->references('id')->on('table_name');
使用主键$table->mediumIncrements('id');
您应该使用unsignedMediumInteger
作为外键
$table-> unsignedMediumInteger('fk_id');
$table->foreign('fk_id')->references('id')->on('table_name');