Laravel迁移150错误

gr8qqesn  于 2022-11-18  发布在  其他
关注(0)|答案(3)|浏览(103)

我的迁移文件中有错误。但我找不到任何错误的解决方案。当我运行迁移命令时,我在以下系统中得到该错误。

[Illuminate\Database\QueryException]
  SQLSTATE[HY000]: General error: 1005 Can't create table 'zadmin_elder.PowerCuts' (errno: 150) (SQL: create table `PowerCuts` (`CutID`
   int unsigned not null auto_increment primary key, `Title` varchar(45) null, `Message` varchar(250) null, `CreatedAt` datetime not nu
  ll, `UpdatedAt` datetime null, `DeletedAt` datetime null, `PlannedDate` date null, `StartTime` time null, `EndTime` time null, `TownI
  D` int unsigned not null, `Distrcit` varchar(45) null, `Geolocation` varchar(45) not null, `GeoRadius` int unsigned not null) default
   character set utf8 collate utf8_unicode_ci)
[PDOException]
  SQLSTATE[HY000]: General error: 1005 Can't create table 'zadmin_elder.PowerCuts' (errno: 150)

下面是我的create_powercut_table.php的创建函数;

Schema::create('PowerCuts', function(Blueprint $table)
        {
            $table->increments('CutID', true)->unsigned();
            $table->string('Title', 45)->nullable();
            $table->string('Message', 250)->nullable();
            $table->dateTime('CreatedAt');
            $table->dateTime('UpdatedAt')->nullable();
            $table->dateTime('DeletedAt')->nullable();
            $table->date('PlannedDate')->nullable();
            $table->time('StartTime')->nullable();
            $table->time('EndTime')->nullable();
            $table->integer('TownID')->unsigned()->index('fk_PowerCuts_Towns1_idx');
            $table->string('Distrcit', 45)->nullable();
            $table->string('Geolocation', 45);
            $table->integer('GeoRadius')->unsigned();
        });

下面是我的create_Foreign_powercut.php的创建函数;

Schema::table('PowerCuts', function(Blueprint $table){
            $table->foreign('TownID', 'PowerCuts_ibfk_1')->references('TownID')->on('Towns')->onUpdate('CASCADE')->onDelete('CASCADE');
        });

谢谢,问候

sulc1iza

sulc1iza1#

根据MySQL InnoDB Error Codes
如果错误消息指涉错误150,则数据表建立失败,因为外部索引键条件约束的格式不正确。
检查PowerCuts.TownIDTowns.TownID是否为完全相同的类型(无符号整数),因为外键字段的类型必须与被引用列的类型相同。

unftdfkk

unftdfkk2#

免责声明:我知道这个问题已经得到了解答,但我将把这个答案留给遇到我的问题的任何人,以便将来进行咨询。

SQLSTATE[HY000]: General error: 1005 Can't create table 'zadmin_elder.PowerCuts' (errno: 150)

此错误通常意味着,在另一个表上引用的外键存在问题,主要原因是不兼容,例如在字符串行上引用整数等。

  • 你好-你好
    就像我的情况一样,引用的是一开始就不存在的东西。
    "让我解释一下"
    你要创建table_b,当然,要完成它,必须创建一个迁移,这样你就得到了[time]_create_table_b迁移。
    突然,您决定创建table_a,并且与前面的表一样,创建了[time]_create_table_a migration,因此您的migrations文件夹看起来如下所示:
/Migrations
/---[time]_create_table_b
/---[time]_create_table_a

直到现在,我们都很冷静。

然后!您更改table_b,使其具有一个引用table_aid的外键,然后进行迁移,当然,它会到达必须创建引用的位置,并导致!notable_a.id

因此,您可能需要考虑迁移创建的时间顺序。

简单来说:

您希望在table_a的一侧放置一个外键,以便引用table_b的id,您的迁移应该是这样的:

[time]_create_table_a.php 
[time].create_table_b.php

因此,首先创建table_a,随着table_b的创建继续,它会找到要引用的内容!

用更简单的话来说,对于那些懒惰的人来说:

1.删除所有迁移。
1.创建表的迁移,以获取哪些键是外键。
1.创建包含外键引用的表的迁移。
希望我能帮上忙。

3j86kqsm

3j86kqsm3#

我也遇到了这个错误。下面是解决方案。您需要在创建主表之前创建外表。请参见下图。enter image description here

相关问题