Laravel迁移不会引用第二个外键

时间:2014-11-12 17:14:05

标签: laravel migration

我试图在两个表(类别和品牌表)上引用产品的ID。

public function up()
{
        Schema::create('products', function($table)
        {
                $table->increments('id');
                $table->integer('category_id')->unsigned();
                $table->integer('brand_id')->unsigned();
                $table->string('title');
                $table->text('description');
                $table->decimal('price', 6, 2);
                $table->boolean('availability')->default(1);
                $table->string('image');
                $table->timestamps();
        });

        Schema::table('products', function($table){
                $table->foreign('category_id')->references('id')->on('categories');
                $table->foreign('brand_id')->references('id')->on('brands');
        });
}

但我收到以下错误:

[Illuminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL
: alter table `products` add constraint products_brand_id_foreign foreign k
ey (`brand_id`) references `brands` (`id`))


[PDOException]
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint

这是正确的方法吗?

更新

迁移品牌表的公共功能

public function up()
{
        Schema::create('brands', function($table){
                $table->increments('id');
                $table->string('name');
                $table->timestamps();
        });
}

解决方案

最后,错误在于迁移的命名。由于brands表是最新的表,我必须将其名称从2014_12_12_164325_create_brands_table更改为此2014_10_12_164325_create_brands_table,并且表已成功迁移。

1 个答案:

答案 0 :(得分:1)

一切看起来都不错。此外,由于它只是抱怨第二部分,外键的类别必须起作用。我认为品牌表并不存在或者存在问题。该表是否存在并且是否具有主键" id"?

我也用

$table->engine = 'InnoDB';

一开始,因为截至目前,MyISAM不支持外键。我不认为在上述情况下它应该是一个问题,但如果你想在数据库级别上做外键限制,可能仍然是可取的。