【问题标题】:SQLSTATE[HY000]: General error: 1005 Can't create table `business`.`users` (errno: 150 "Foreign key constraint is incorrectly formed") Laravel 7SQLSTATE [HY000]:一般错误:1005无法创建表`business`.`users`(errno:150“外键约束形成错误”)Laravel 7
【发布时间】:2020-12-19 15:32:35
【问题描述】:

我需要在用户(从 laravel 7 auth 脚手架创建)和类别之间创建一对多的关系。 但是当我运行迁移时,我得到了这个错误: 迁移:2014_10_12_000000_create_users_table

照亮\数据库\查询异常

SQLSTATE[HY000]: 一般错误: 1005 Can't create table business.users (errno: 150 "外键约束格式不正确") (SQL: alter table users add constraint users_category_id_foreign外键(category_id)在删除级联时引用catgoriesid

这是用户架构:

Schema::create('users', function (Blueprint $table) {
        $table->id();
        $table->unsignedBigInteger('category_id');
        $table->string('name');
        $table->string('email')->unique();
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();

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

    });

这是类别中的一个:

Schema::create('categories', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('category');
        $table->timestamps();
    });

我查了一下,发现出现这样的错误有两个原因,第一个是classes表迁移应该在users表之前进行,第二个是category id datatype在用户架构和类别上的 id 之一必须相同,我验证了这两个条件,但仍然遇到相同的错误。 如果有人能告诉我出了什么问题,我将不胜感激!

【问题讨论】:

  • 您是如何让类别迁移先行的?您可以为类别添加迁移名称吗?
  • 我通过以下命令进行了迁移: php artisan migrate --path=/database/migrations/2020_08_22_121822_create_categories_table.php 然后,我通过以下命令进行了用户迁移: php artisan migrate --path=/database /migrations/2014_10_12_000000_create_users_table.php
  • 您不必手动进行,laravel 迁移使用日期作为顺序(实际上只是名称,但它以日期开头)只需将用户迁移更改为 2020_08_22_121823_create_users_table.php 它将迁移正确的顺序
  • 也正如@Sobir 指出的那样,您输入错误on('catgories')
  • 非常有用的信息,尤其是我的项目案例,谢谢!

标签: php mysql laravel one-to-many


【解决方案1】:

更改on('categories') 而不是on('catgories') 你写了catgories。但一定是categories

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

【讨论】:

  • 不错的表名
  • 我很高兴它有帮助。
【解决方案2】:

当外键的类型与主键的类型不匹配时会发生这种情况。

确保category_id 的类型和长度与类别表类别的主键完全相同。因此,如果您声明为无符号大整数,请确保 categories.id 是无符号大整数。

【讨论】:

    猜你喜欢
    • 2020-12-02
    • 2020-11-27
    • 1970-01-01
    • 2022-01-25
    • 2021-09-23
    • 2021-08-06
    • 2020-08-07
    • 2021-01-05
    • 2017-08-20
    相关资源
    最近更新 更多