我遇到了一个令我困惑的外键问题。在运行迁移时遇到的具体错误是:
SQLSTATEHY000:一般错误: 1215不能添加外键约束(SQL: alter
products添加约束products_provider_id_foreign alter (provider_id) referencesid(providers) on delete级联)
MySQL SHOW ENGINE INNODB STATUS;在最新外键错误下的结果是:
表testdb/#sql-186_18 to:外键约束中的错误:删除级联上的外键(
provider_id)引用id(providers):无法在删除级联上解析表名(providers)
我检查了以下所有内容:
int10unsignedprimaryINNODButf8utf8第一个表是providers,具有一个主键id,定义为INT(10)并没有签名:

第二个表是products,它有一个名为provider_id的列,定义为INT(10)并没有签名。

当然,这个错误已经有了很好的记录,特别是在这样的情况下,但是没有一个常见的东西(including this checklist)起作用。有人认为这里有什么问题或有什么其他建议吗?
不管它的价值是什么,我的制度:
编辑
加入外键的Laravel迁移的相关部分是:
Schema::table('products', function (Blueprint $table) {
$table->foreign('provider_id')->references('providers')->on('id')->onDelete('cascade');
$table->foreign('brand_id')->references('brands')->on('id')->onDelete('cascade');
});产品表的创建如下所示:
public function up()
{
Schema::create('products', function(Blueprint $table) {
$table->increments('id');
$table->integer('provider_id')->unsigned();提供者移徙的相关部分是:
public function up()
{
Schema::create('providers', function(Blueprint $table) {
$table->increments('id');最初,我使用Schema::create(...)创建表的外键部分,但是当它不能工作时,我尝试在创建之后让它出现,以防由于某种原因它没有正确地构建迁移。
发布于 2016-02-23 03:20:52
改变这一点:
Schema::table('products', function (Blueprint $table) {
$table->foreign('provider_id')->references('providers')->on('id')->onDelete('cascade');
$table->foreign('brand_id')->references('brands')->on('id')->onDelete('cascade');
});至
Schema::table('products', function (Blueprint $table) {
$table->foreign('provider_id')->references('id')->on('providers')->onDelete('cascade');
$table->foreign('brand_id')->references('id')->on('brands')->onDelete('cascade');
});您已经将该职位替换为列名和表。
https://stackoverflow.com/questions/35568053
复制相似问题