当前位置: 首页 > 知识库问答 >
问题:

Laravel迁移(错误号:150“外键约束格式不正确”)

单于淇
2023-03-14

我有一个订单表和一个有一个sell_shipping_labels引用orders.id作为一个外来的。然而,当我运行Laravel迁移我得到可怕的错误代码:


SQLSTATE[HY000]:常规错误: 1005不能创建表cheapbooks_test.#sql-b5b_b2a(errno: 150"外键约束格式不正确")(SQL:改变表sell_shipping_labelsadd约束sell_shipping_labels_order_id_foreign外键(order_id)引用订单id


SQLSTATE[HY000]:常规错误: 1005不能创建表cheapbooks_test.#sql-b5b_b2a(errno: 150"外键约束格式不正确")

这是我的订单表模式:

   Schema::create('orders', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('user_id');
        $table->integer('book_id');
        $table->integer('status_id');
        $table->double('payment_amount')->nullable();
        $table->timestamp('received_at')->nullable();
        $table->timestamp('paid_at')->nullable();
        $table->timestamps();
        $table->softDeletes();
    });

这是我的sell\u shipping\u标签schema:

Schema::create('sell_shipping_labels', function (Blueprint $table) {
        $table->increments('id');
        $table->unsignedInteger('order_id');
        $table->string('shippo_object_id');
        $table->string('label_url');
        $table->string('tracking_url');
        $table->string('tracking_number');
        $table->timestamp('arrived_at');
        $table->timestamps();
        $table->softDeletes();

        $table->foreign('order_id')->references('id')->on('orders');
    });
}

现在我把互联网翻了个底朝天,试图找出问题所在。所有关于这个问题的帖子都提到这样一个事实,即订单表必须在有外键的表之前创建,但这对我来说不是问题,因为我的文件顺序正确。

共有3个答案

华展鹏
2023-03-14

主键和外键应在同一数据类型中。

如果主键使用的是无符号的大整数,则外键也应该使用无符号的大整数

如果laravel 5.8在生成新迁移时默认使用bigIncrements(请参阅此pull请求),则应确保您的外键也是无符号的big_整数,否则将出现错误。

用户

Schema::create('users', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->string('name');

    ...

}

表<代码>订单:

Schema::create('orders', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->unsignedBigInteger('user_id');

    ...

    $table->foreign('user_id')->references('id')->on('users');
}

希望这有帮助。

松元明
2023-03-14

外键必须是"unsignedBigintger",它将被修复,类似这样:

$table->unsignedBigInteger('user_id');

$table->foreign('user_id')->references('id')->on('users');
荣波
2023-03-14

由于增量()创建无符号整数列,因此您也需要将外键列定义为无符号整数。

Laravel 6中的默认迁移使用bigingress(),因此需要使用unsignedbiginger()方法:

$table->unsignedBigInteger('order_id');

https://laravel.com/docs/6.x/migrations#foreign-key-constraints

对于较旧版本的Laravel中的默认迁移,请使用unsignedInteger()方法:

$table->unsignedInteger('order_id');

或:

$table->integer('order_id')->unsigned();

https://laravel.com/docs/5.5/migrations#foreign-key-constraints

 类似资料:
  • 我有一个帖子表和一个到达表,它引用了flight no(文本字符串格式)作为外键。然而,当我运行Laravel迁移时,我得到了可怕的错误: SQLSTATE[HY000]:常规错误: 1005不能创建表.(errno: 150"外键约束格式不正确")(SQL:改变表添加约束外键()引用() [PDOExc0019]SQLSTATE[HY000]:常规错误: 1005不能创建表.(errno: 15

  • 进行4次迁移,如下所示。这是用户表。 这就是艺术家的迁移。 这是歌曲迁移。 这就是专辑迁移。 这是一个连接众多艺术家和歌曲的特色。 当我尝试迁移这四个迁移时,会出现此错误。

  • 我试图执行此迁移: 用户: 文章: 但当我迁移时,会出现以下错误: SQLSTATE[HY000]:一般错误: 1005不能创建表.(Errcode: 150"外键约束是inc orrecly形成的")(SQL:更改表添加约束外键()引用()在更新级联上删除级联) 我已经尝试将大整数和大增量重命名为简单整数和增量,但没有成功。

  • 迁移我的数据库时,会出现此错误。下面是我的代码,后面是我在尝试运行迁移时遇到的错误。 密码 错误消息 [Illumb\Database\QueryException] SQLSTATE[HY000]:一般错误:1005无法创建表(errno:150“外键约束格式不正确”)(sql:alter 表添加约束MEINS\u category\u id\u外键()参考()关于删除级联)

  • 运行迁移命令时出现错误。 这是管理表模式 另一个是laravel安装附带的用户表。 我想为user_id创建一个外键,但它会出错

  • 我正在尝试迁移我的Rails MySQL数据库,但遇到以下错误: ActiveRecord::StatementInvalid:mysql2::错误:无法创建表。(错误号:150“外键约束格式不正确”):创建表(int AUTO_INCREMENT主键,varchar(255),int,int,datetime不为空, 以下是我的迁移: 如果有人能在这里给我一个主意,我将非常感谢。我已经搜索了一段