如何创建数据透视表 laravel?

Posted

技术标签:

【中文标题】如何创建数据透视表 laravel?【英文标题】:How to create a pivot table laravel? 【发布时间】:2020-02-09 18:25:00 【问题描述】:

我有一个简单的博客,其中有一个包含标题和标签的帖子,现在我希望用户能够添加标签,根据我需要使用名称约定创建数据透视表的文档。

phpMyAdmin 上的帖子表

id   title
1    Death
2    Love

PHPMyAdmin 上的标签表

id   name

这是我创建数据透视表的迁移

<?php

class CreatePostTagTable extends Migration

    public function up()
    
        Schema::create('post_tag', function (Blueprint $table) 
            $table->bigIncrements('id');
            $table->integer('post_id')->unsigned();
            $table->foreign('post_id')->references('id')->on('posts');
            $table->integer('tag_id')->unsigned();
            $table->foreign('tag_id')->references('id')->on('tags');
        );
    

    public function down()
    
        Schema::dropIfExists('post_tag');
    

现在,当我运行 PHP artisan migrate 时,出现以下错误。

 SQLSTATE[HY000]: General error: 1005 Can't create table `royalad`.`#sql-ee8_307` (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter table `post_tag` add constraint `post_tag_post_id_foreign` foreign key (`post_id`) references `posts` (`id`)) 

我的代码做错了什么?

【问题讨论】:

【参考方案1】:

在您的tag_id 中也将$table-&gt;integer('post_id')-&gt;unsigned(); 更改为$table-&gt;bigInteger('post_id')-&gt;unsigned();

【讨论】:

因为外键必须与本地键匹配格式 顺便说一句,创建数据透视表时根本不需要外键 非常感谢解决了这个问题,他们应该将此添加到文档中,对于新手会有用 我们一直向文档发送拉取请求,但他们拒绝了它¯\_(ツ)_/¯

以上是关于如何创建数据透视表 laravel?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过laravel创建数据透视表

将数据添加到 Laravel 数据透视表

Laravel:如何使用数据透视表获取记录?

如何在 laravel 中使用数据透视表中的 3 个关系创建关系?

laravel:更新或创建(更新插入)数据透视表

laravel 检索值匹配数据透视表的所有用户