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

Laravel迁移:外键约束格式不正确(errno 150)

万俟英锐
2023-03-14

迁移我的数据库时,会出现此错误。下面是我的代码,后面是我在尝试运行迁移时遇到的错误。

密码

public function up()
{
    Schema::create('meals', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('user_id')->unsigned();
        $table->integer('category_id')->unsigned();
        $table->string('title');
        $table->string('body');
        $table->string('meal_av');
        $table->timestamps();
        $table->foreign('user_id')
            ->references('id')
            ->on('users')
            ->onDelete('cascade');
        $table->foreign('category_id')
            ->references('id')
            ->on('categories')
            ->onDelete('cascade');
    });
}  

错误消息

[Illumb\Database\QueryException]
SQLSTATE[HY000]:一般错误:1005无法创建表MEIN\sql-11d2\u 1 4(errno:150“外键约束格式不正确”)(sql:alter
MEINS添加约束MEINS\u category\u id\u外键(category\u id)参考类别id)关于删除级联)

共有3个答案

袁秦迟
2023-03-14

只需添加-

扶冠宇
2023-03-14

@JuanBonnett的问题激励我找到答案。我使用Laravel来自动化这个过程,而不考虑文件本身的创建时间。根据工作流,“膳食”将在其他表(类别)之前创建,因为我在类别之前创建了其模式文件(膳食)。那是我的错。

翁宜年
2023-03-14

在Laravel中创建新表时。将生成一个迁移,如下所示:

$table->bigIncrements('id');

而不是(在较旧的Laravel版本中):

$table->increments('id');

当使用big增量时,外键需要bigintger而不是整数。所以你的代码会像这样:

public function up()
    {
        Schema::create('meals', function (Blueprint $table) {
            $table->increments('id');
            $table->unsignedBigInteger('user_id'); //changed this line
            $table->unsignedBigInteger('category_id'); //changed this line
            $table->string('title');
            $table->string('body');
            $table->string('meal_av');
            $table->timestamps();

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

            $table->foreign('category_id')
                ->references('id')
                ->on('categories')
                ->onDelete('cascade');
        });
    }  

你也可以使用增量而不是像Kiko Sejio所说的大增量

Integer和BigInteger之间的差异是大小:

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

  • 我有一个订单表和一个有一个引用作为一个外来的。然而,当我运行Laravel迁移我得到可怕的错误代码: SQLSTATE[HY000]:常规错误: 1005不能创建表.(errno: 150"外键约束格式不正确")(SQL:改变表add约束外键()引用() SQLSTATE[HY000]:常规错误: 1005不能创建表.(errno: 150"外键约束格式不正确") 这是我的表模式: 这是我的sch

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

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

  • 使用Laravel 5.3和雄辩模型,试图制作一个用户角色模型。我有2个表用户和角色的主要模式,每个用户都有一个角色,每个角色都有很多用户(一对多的关系)。 当我试图在用户表中创建一个引用角色表中id的外键时,它会给我这个错误 在Connection.php647行: SQLSTATE[HY000]:一般错误:1005无法创建表mydata。#sql-7e0_71(错误号:150“外键约束格式不正

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