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

使用laravel创建外键会出现错误:无法添加外键约束

孙志
2023-03-14

我想添加两个表,一个产品表和一个类别表。然后我要将产品表中的一个类别id链接到类别表中的主键。下面是我的代码:

public function up()
{
    Schema::create('products', function (Blueprint $table) {
      $table->bigIncrements('id');
      $table->string('title');
      $table->string('imgpath');
      $table->text('description');
      $table->integer('price');
      $table->integer('hotItemNumber')->nullable();
      $table->timestamps();
      $table->softDeletes();
    });
}
public function up()
{
    Schema::create('categories', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('categroyName');
        $table->timestamps();
    });
}
public function up()
{
  Schema::table('products', function($table) {
    $table->integer('category_id')->unsigned()->index();
    $table->foreign('category_id')->references('id')->on('categories');
  });
}

SQLSTATE[HY000]:一般错误:1215无法添加外键约束(SQL:alter table产品添加约束products_categoryid_foreign外键(categoryid)引用category(id))

共有1个答案

沈嘉瑞
2023-03-14

在新的迁移中,尝试更改类型,如下所示

public function up()
{
  Schema::table('products', function($table) {
    $table->bigInteger('category_id')->unsigned()->index();
    $table->foreign('category_id')->references('id')->on('categories');
  });
}

因为在categories表中,id的类型为bigincrements

 类似资料:
  • 表a已成功创建... 错误1215(HY000):无法添加外键约束 无法创建表b

  • 我有两张桌子。第一个是人口;第二个是空的。 我希望第二个有一个外键,它引用第一个中的一列。 null 架构: 填充。为空。 不能成为的外键: MySQL没有提供错误的原因;不返回: 我拥有所需的数据库权限。 我已经仔细检查了列(甚至表)是否具有相同的排序规则(字符集不适用于INT列): MySQL无法添加外键约束 MySQL:错误1215(HY000):无法添加外键约束 无法添加外键约束-MySQ

  • 我有多个迁移,但我认为与这个问题相关的两个迁移是“作业”和“会话”迁移。 作业迁移

  • 问题内容: 我正在尝试通过使用外键来确保表之间的数据一致性,以便DBMS可以检查错误。但是,由于某些原因,我们似乎无法做到这一点。有什么错误,还有替代方法吗?另外,当我填写具有外键的表时,无法填写为外键保留的字段,对吗?另外,外键是否完全视为键? 问题答案: 最可能的问题是此行: classLeader的数据类型为VARCHAR(255)。这有 匹配数据类型 的引用的列… 。当然,表必须存在,列也

  • 问题内容: 我正在尝试将新模式转发工程到我的数据库服务器上,但是我不知道为什么会收到此错误。我试图在这里搜索答案,但是我发现的所有内容都说是将db引擎设置为Innodb或确保要用作外键的键是它们自己表中的主键。如果我没记错的话,我都做过这两件事。你们还有其他帮助吗? SQL脚本执行完成:语句:成功7次​​,失败1次 这是父表的SQL。 问题答案: 我猜,和/或不完全相同的数据类型和。 也许父表中的

  • 引用的表是“组”(InnoDB)。 它有一个“id”列,定义为INT(11),不可为空,自动递增,主键 引用表为“用户(InnoDB)” 它的group_id列定义为INT(11),不可为空。 在引用表中已经存在一个基于“group_id”列的唯一索引 但是whn正在执行 我出错了 错误:1215无法添加外键约束 我添加db转储 检查清单 Db是InnoDB吗?是的 所有表都是InnoDB吗?是的