【问题标题】:Laravel migration blows up on foreign key. Already using unsigned int and referencing created tablesLaravel 迁移在外键上爆炸。已经使用 unsigned int 并引用创建的表
【发布时间】:2015-05-02 07:25:22
【问题描述】:

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

我有以下代码:

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'表,这些表已经被其他表创建和引用,它们完美地工作。但是,每次我尝试使用上面的代码运行“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

【问题讨论】:

  • “我的终端爆炸了”是什么意思。您将需要更具体。错误信息是什么?
  • 您可以尝试使用php artisan migrate:refresh 刷新迁移。这将回滚所有迁移并再次运行它们。
  • 感谢您的回复。我是个新手,但我的终端开始输出随机 laravel 文件的代码行,直到达到 php 内存限制。我也尝试过刷新和回滚,但仍然遇到同样的问题。
  • 您能否将终端输出记录到文件中,例如php artisan migrate > migrate_error.log 然后把日志文件的内容贴在pastebin.com 上供我们查看。
  • 首先你能检查库存和inventory_categories 表上的索引是否被命名为'id',并且与inventory_category_id 和inventory_id 字段的类型(无符号)和大小相同?

标签: php mysql laravel wamp laravel-artisan


【解决方案1】:

我解决了: 原来我的数据库配置是错误的。我的表被配置为 MyISAM,而它们本来应该是 InnoDB。

【讨论】:

    【解决方案2】:

    由于 SQL 语句失败,您所得到的是堆栈跟踪。就是说不能将inventory_category_relations.inventory_category_id的外键约束添加到引用inventory_categories.id。

    我的想法是删除以下部分

    ->nullable()->default(null)
    

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

    【讨论】:

      猜你喜欢
      • 2021-07-27
      • 2020-12-16
      • 2016-12-07
      • 2018-05-16
      • 2023-01-04
      • 2021-02-20
      • 1970-01-01
      • 2017-08-16
      • 1970-01-01
      相关资源
      最近更新 更多