Laravel 外键迁移失败。已经在使用 unsigned int 并引用创建的表

Laravel migration blows up on foreign key. Already using unsigned int and referencing created tables

我绞尽脑汁想弄清楚这个问题,但无济于事。请帮忙。

我有以下代码:

Schema::create('inventory_category_relations', function(Blueprint $table)
        {
            $table->increments('id');
            $table->integer('inventory_category_id')->unsigned()->nullable()->default(null);
            $table->foreign('inventory_category_id')->references('id')->on('inventory_categories');
            $table->integer('inventory_id')->unsigned()->nullable()->default(null);
            $table->foreign('inventory_id')->references('id')->on('inventory');
            $table->timestamps();
            $table->softDeletes(); 
        });

上面的代码引用了一个 'inventory' 和 'inventory_categories' table,其中 table 已经创建并被其他 table 引用,这有效完美。但是,每次我尝试使用上面的代码 运行 "php artisan migrate" 时,我的终端都会崩溃。

编辑 这是我原来的 'inventory' 和 'inventory_categories' 创建语句:

Schema::create('inventory_categories', function(Blueprint $table)
        {
                $table->increments('id');
                $table->string('name');
                $table->timestamps();
                $table->softDeletes();
        });
Schema::create('inventory', function(Blueprint $table)
        {
            $table->increments('id');
            $table->string('title');
            $table->mediumText('basic_description');
            $table->unsignedInteger('inventory_type_id');
            $table->foreign('inventory_type_id')->references('id')->on('inventory_types')->onDelete('cascade');
            $table->unsignedInteger('vendor_id');
            $table->foreign('vendor_id')->references('id')->on('vendors')->onDelete('cascade');
            $table->unsignedInteger('inventory_category_id');
            $table->foreign('inventory_category_id')->references('id')->on('inventory_categories')->onDelete('cascade');
            $table->decimal('price',10,2);
            $table->decimal('compare_price',10,2);
            $table->integer('quantity');
            $table->string('sku');
            $table->string('barcode');
            $table->boolean('no_stock_purchase')->default(0);
            $table->boolean('shipping_address')->default(0);
            $table->decimal('shipping_weight')->default(0);
            $table->boolean('free_shipping')->default(0);
            $table->boolean('taxes')->default(1);
            $table->boolean('multiple_options')->default(0);
            $table->boolean('custom_variants')->default(0);
            $table->boolean('active')->default(1);
            $table->boolean('has_publish_date')->default(0);
            $table->dateTime('start_date');
            $table->dateTime('end_date');
            $table->string('url');
            $table->string('meta_title');
            $table->mediumText('meta_description');
            $table->boolean('has_commission')->default(0);
            $table->unsignedInteger('created_by');
            $table->foreign('created_by')->references('id')->on('users')->onDelete('cascade');
            $table->timestamps();
            $table->softDeletes(); 
        });

我在 wamp 服务器上使用 laravel 4.2

更新: 好的,我使用 "php artisan migrate > migrate_error.log" 并将结果发布到 pastebin。该文件太大,但我发布了适合的文件: http://pastebin.com/J8KZn7R5

由于 SQL 语句失败,您得到的是堆栈跟踪。是说不能给引用inventory_categories.id.

加上inventory_category_relations.inventory_category_id的外键约束

我的想法是删除以下部分

->nullable()->default(null)

来自 inventory_category_relations 迁移中的两列创建语句。它们都引用的列是自动递增的主键 ID;那些无论如何都不应该解析为 NULL。

我解决了: 事实证明我的数据库配置是错误的。我的表被配置为 MyISAM,而它们应该是 InnoDB。