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

laravel 5.4迁移错误号:150“外键约束格式不正确”

吴同
2023-03-14

进行4次迁移,如下所示。这是用户表。

 Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });

这就是艺术家的迁移。

Schema::create('artists', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('slug');
            $table->string('image')->nullable();
            $table->text('biography')->nullable();
            $table->integer('week_hits');
            $table->timestamp('week_date');
            $table->timestamp('viewed_now');
            $table->boolean('status')->default(1);
            $table->integer('user_id')->unsigned();
            $table->foreign('user_id')->references('id')->on('users');
            $table->timestamps();
        });

这是歌曲迁移。

Schema::create('songs', function (Blueprint $table) {
            $table->increments('id');
            $table->string('title');
            $table->text('lyrics')->nullable();
            $table->string('mp3');
            $table->string('youtube_id')->nullable();
            $table->timestamp('week_date');
            $table->integer('week_hits')->nullable();
            $table->timestamp('played_now')->nullable();
            $table->timestamp('hits');
            $table->integer('album_id')->unsigned()->nullable();
            $table->foreign('album_id')->references('id')->on('albums');
            $table->integer('artist_id')->unsigned();
            $table->foreign('artist_id')->references('id')->on('artists');
            $table->timestamps();
        });
    }

这就是专辑迁移。

Schema::create('albums', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('cover');
            $table->integer('artist_id')->unsigned();
            $table->foreign('artist_id')->references('id')->on('artists');
            $table->boolean('status')->default(true);
            $table->timestamp('viewed_now')->nullable();
            $table->integer('week_hits')->nullable();
            $table->timestamp('week_date');
            $table->timestamps();
        });

这是一个连接众多艺术家和歌曲的特色。

Schema::create('featuring', function (Blueprint $table) {
    $table->integer('artist_id')->unsigned()->nullable();
    $table->foreign('artist_id')->references('id')->on('artists');
    $table->integer('song_id')->unsigned()->nullable();
    $table->foreign('song_id')->references('id')->on('songs')->onDelete('cascade');
    $table->timestamps();
});

当我尝试迁移这四个迁移时,会出现此错误。

SQLSTATE[HY000]: General error: 1005 Can't create table `laravel`.`#sql-f0_11e` (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter table `songs` add const
  raint `songs_album_id_foreign` foreign key (`album_id`) references `albums` (`id`))

共有2个答案

晏永康
2023-03-14

您可能无法在创建过程中设置外键。您必须先创建表,然后再设置外键。您可以使用SHEMa::create创建表,然后使用SHEMa::表设置外键。示例:

Schema::create('users', function (Blueprint $table) {
    $table->increments('id');
});

Schema::table('posts', function (Blueprint $table) {
    $table->integer('user_id')->unsigned();

    $table->foreign('user_id')->references('id')->on('users');
});
单淳
2023-03-14

您首先创建了table歌曲,然后创建了table相册。当您尝试在歌曲表中添加外键时,尚未创建专辑表,因此无法在未创建该表的情况下将外键添加到表中。

所以,您需要的是,在歌曲表之前创建相册表。

 类似资料:
  • 我有一个帖子表和一个到达表,它引用了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

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

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

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

  • 我正在尝试迁移Rails MySQL数据库,出现以下错误: ActiveRecord::声明无效:MySQL2::Error:不能创建表.(errno: 150"外键约束格式不正确"): CREATE TABLE(intAUTO_INCREMENTPRIMary关键,varchar(255),int,int,datetime非空,datetime非空,INDEX(),INDEX(),CONSTRA