首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在具有多对多关系的Laravel中实现具有6个外键的表

在具有多对多关系的Laravel中实现具有6个外键的表,可以通过中间表来实现。

首先,需要创建两个表,分别是"table1"和"table2",并为它们创建对应的模型。

代码语言:txt
复制
php artisan make:model Table1
php artisan make:model Table2

接下来,创建中间表"table1_table2",并为其创建对应的模型。

代码语言:txt
复制
php artisan make:model Table1Table2 -m

在中间表的迁移文件中,添加6个外键字段。

代码语言:txt
复制
public function up()
{
    Schema::create('table1_table2', function (Blueprint $table) {
        $table->unsignedBigInteger('table1_id');
        $table->unsignedBigInteger('table2_id');
        $table->unsignedBigInteger('foreign_key1');
        $table->unsignedBigInteger('foreign_key2');
        $table->unsignedBigInteger('foreign_key3');
        $table->unsignedBigInteger('foreign_key4');
        
        $table->foreign('table1_id')->references('id')->on('table1')->onDelete('cascade');
        $table->foreign('table2_id')->references('id')->on('table2')->onDelete('cascade');
        $table->foreign('foreign_key1')->references('id')->on('foreign_table1')->onDelete('cascade');
        $table->foreign('foreign_key2')->references('id')->on('foreign_table2')->onDelete('cascade');
        $table->foreign('foreign_key3')->references('id')->on('foreign_table3')->onDelete('cascade');
        $table->foreign('foreign_key4')->references('id')->on('foreign_table4')->onDelete('cascade');
        
        $table->primary(['table1_id', 'table2_id', 'foreign_key1', 'foreign_key2', 'foreign_key3', 'foreign_key4']);
    });
}

在模型中,定义多对多关系及外键。

代码语言:txt
复制
class Table1 extends Model
{
    public function table2()
    {
        return $this->belongsToMany(Table2::class, 'table1_table2', 'table1_id', 'table2_id')
            ->withPivot('foreign_key1', 'foreign_key2', 'foreign_key3', 'foreign_key4');
    }
}

class Table2 extends Model
{
    public function table1()
    {
        return $this->belongsToMany(Table1::class, 'table1_table2', 'table2_id', 'table1_id')
            ->withPivot('foreign_key1', 'foreign_key2', 'foreign_key3', 'foreign_key4');
    }
}

现在,你可以通过以下方式来操作多对多关系的数据:

代码语言:txt
复制
$table1 = Table1::find(1);
$table2 = Table2::find(2);

$table1->table2()->attach($table2, [
    'foreign_key1' => 1,
    'foreign_key2' => 2,
    'foreign_key3' => 3,
    'foreign_key4' => 4,
]);

$table1->table2()->detach($table2);

$table1->table2()->sync([
    $table2->id => [
        'foreign_key1' => 1,
        'foreign_key2' => 2,
        'foreign_key3' => 3,
        'foreign_key4' => 4,
    ],
]);

这样,你就可以在具有多对多关系的Laravel中实现具有6个外键的表了。

关于Laravel的更多信息和使用方法,你可以参考腾讯云的Laravel云托管服务:https://cloud.tencent.com/product/laravel

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

多表间关系-一--一一-约束

多表间关系-一--一一-约束 1. 关系概述 现实生活,实体与实体之间肯定是有关系,比如:老公和老婆,部门和员工,用户和订单、订单和商品、学生和课程等等。...之间关系分成三种: 一一 (老公和老婆) 一 (部门和员工, 用户和订单) (学生和课程) 例如: 双11当天,马哥和东哥两个用户分别在淘宝上下了一些订单,已知马哥下了...一(1:n) 例如:班级和学生,部门和员工,客户和订单,分类和商品 一原则: 在从(多方)创建一个字段,指向主表(一方)主键.我们把这个字段称之为. 3.... (m:n) 例如:老师和学生,学生和课程,用户和角色 关系原则: 需要创建第三张,中间至少两个字段,这两个字段分别作为键指向各自一方主键。 4....两种建原则: 唯一:主表主键和从(唯一),形成主外关系唯一UNIQUE 是主键:主表主键和从主键,形成主外关系 5.

5.6K20

JDBC上关于数据库多表操作一关系关系实现方法

我们知道,在设计一个Java bean时候,要把这些BEAN 数据存放在数据库结构,然而这些数据库直接又有些特殊关系,例如员工与部门直接有一关系,学生与老师直接又多关系,那么这些关系如何表示呢...首先在建立数据库时候就应该建立这样对应关系。...一 ,只要建立两个就能建立这样关系,因为你可以把多方那个设置一个Foreign Key 属性 ,下面是一个部门和员工结构关系 在MySQL 数据库上应该这样建立结构: create table...public List findDepts() { return findDepts(true); } } 关系 下面以老师和学生关系来说明这个结构...(某些驱动并不支持只读模式,:Informix) defaultReadOnly= #driver default 指定由连接池所创建连接事务级别(TransactionIsolation)。

3.5K70

Laravel 模型关联基础教程详解

Laravel 定义模型关联是每个 Laravel 开发者可能已经做过不止一次事情。但是在试图实现关联时可能会遇到各种问题。因为 Laravel 有各种各样关联,你应该选择哪一个?...Laravel 有 3 种不同关联类型。 一一 一 我们将逐个探讨不同关联类型并解释一下应该什么时候使用它们。 一一 一一关联是目前存在最基本关联。...举个例子,一个 User 模型和一个 Passport 模型会成为一关联。一个用户只能拥有一张通行证,同样,一张通行证也只属于一个用户。 让我们看看如何在代码定义这种关联。 <?...我们通过 hasOne 方法告诉 Laravel User 模型有一个 Passport 。 注意: 所有用于定义关联方法都有可选额外参数,你可以在这些参数定义本地。...你可以通过创建迁移文件在 Laravel 创建此中间。 远程关联 远程一一 has one through 关联通过单个中间关联模型实现

5.5K31

Laravel学习记录--Model

渴求式加载多个关联关系 有时候你需要在单个操作渴求式加载多个不同关联关系,要实现这一功能,只需添加参数到with方法即可 ,以逗号分割 ,查询文章作者即所在栏目 嵌套渴求式加载 要使用嵌套渴求式加载关联关系...(articles),用户与文章是一关系,国家与用户也是一关系,那么怎么实现根据不同国家显示对应文章?...学到了这里,理解多态也不是很难了,还是举例说明,文章与标签关系这个大家知道,因此我们需要建立文章与标签,以及中间,中间存放文章与标签id使他们建立连接,这是常规套路,但如果我们系统大一点...这样或许也行吧,或许有更方便办法—就是马上要学习多态,多态也是需要中间,与常规差不多,只是中间需要_type(模型类型字段),_id(关联模型id) 话不多说直接上案例 我们要实现功能是...) 如果要更新新创建模型实例所属模型字段,可用associate方法实现 phones要更新uid字段 public function show(){ $user = Muser

13.4K20

浅谈laravel5.5 belongsToMany自身正确用法

场景 用户之间相互关注,记录这种关系是followers(follower_id 发起关注的人 followed_id被关注的人) 现在关系就不再是传统三张关系了, 这种情况 关系应该怎么声明呢...分析 laravel或者其他框架关系 一般都是由Model1 Model2 Model1_Model2(声明两者关系)来组成, 但是上面的场景 却是只有两张,这时候就要研究下官方文档了...; 当然是支持 参考资料 https://laravel.com/docs/5.6/eloquent-relationships#many-to-many In addition to customizing...以达到个性化需求, 第一个参数是 第二个Model 第二个参数是 关系名 第三个参数是 第一个Model在关系ID 第四个参数是 第二个Model在关系ID 解决...关系名是 ‘followers’ /** * 关注当前用户 * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany

1.3K31

还得再来聊聊Laravel模型一些事

前言 之前,在文章:https://www.misiyu.cn/article/58.html 已经发过关于Laravel关系了。 但回过头来,过了个把月再去看,我自己都忘了怎么写了。...确实看laravel中文文档,看得糊里糊涂。还是得在实践理解啊。 情景假设 我有一张来源(referers)来记录href和网页标题title。...简言之就是,这是关系。 细节 新建迁移文件就不说了。 我想说重点是: 1、来源和信息可以没有任何约束,意思就是说各建各,不用考虑什么。...2、这两没有任何关联,如果还要产生关系,那么就要第三张来帮他们建立联系。 以上两点需要特别理解好 ---- 我前面说了,两张(信息、来源)没有任何关系,那么就随便按需求建立就行。...重点是第三张,第三张最少需要2个字段:即两张 ? 注意: 1、你想要有其他字段也行,我们这里讨论最简单情况。 2、第三张命名有要求,主要是Laravel默认情况关系

1.6K00

浅谈laravel orm 关系 hasMany

个人对于laravel orm 对于一关系理解 文章 article,文章自然可以评论, comment 记录文章评论,文章和评论关系就是一,一篇文章可以有多个评论。...在 comment 中有字段article 记录评论所属文章,文章和评论关系如下: article:id … … comment : id … … article_id 在 comment 中有关联...article article_id,所以在 Comment 模型是 belongsTo方法,在 Article 模型是hasMany方法 在文章模型 Article ,则可以有如下方法来关联评论...'(这里是关联字段名,这个例子就是 article_id 字段), ‘id'(对应关联模型主键,这里 id 是关联 article id)); } 对应在 Comment 模型,则可以有如下方法来关联文章...'(这里是关联字段名,这个例子就是 article_id 字段), ‘id'(对应关联模型主键,这里 id 是关联 article id)); } 以上这篇浅谈laravel orm 关系

1.8K31

Laravel源码分析之模型关联

上篇文章我们主要讲了Eloquent Model关于基础CRUD方法实现,Eloquent Model除了基础CRUD还有一个很重要部分叫模型关联,它通过面向对象方式优雅地把数据之间关联关系抽象到了... 多关联不同于一一和一多关联它需要一张中间来记录两端数据关联关系,官方文档里以用户角色为例子阐述了多关联使用方法,我们也以这个例子来看一下底层是怎么来定义多关联。...;//关联模型Role主键在中间role_id $this->foreignPivotKey = $foreignPivotKey;//父模型Role主键在中间user_id...、关联模型、父模型在中间键名、关联模型在中间键名、父模型主键、关联模型主键、关联关系名称。...id $this->firstKey = $firstKey;//用户country_id $this->secondKey = $secondKey;//文章

9.5K10

Laravel Eloquent 模型关联关系详解(上)

到目前为止,我们介绍所有 Eloquent 模型操作都是针对单,接下来我们将花三篇左右篇幅来给大家介绍如何在 Eloquent 模型类建立模型之间各种关联关系,以及如何实现关联查询和更新。...,第二个参数是关联模型类所属,这里对应是 user_profiles user_id 字段,第三个参数是关联关联到当前模型所属哪个字段,这里对应是 users id...第二个参数是当前模型类所属,在本例是 user_profiles user_id 字段,拼接规则和 hasOne 那里类似,只不过这里是基于第四个参数关联关系名称 $relation:...), 第三个参数是 $foreignPivotKey 指的是中间当前模型类,默认拼接规则和前面一一、一一样,所以在本例是 posts post_id 字段。...第四个参数 relatedPivotKey 是中间当前关联模型类,拼接规则和 foreignPivotKey 一样,只不过作用于关联模型类,所以在本例是 tags tag_id 字段。

9.8K40

「数据架构」什么是实体关系图(ERD)?

在典型ER设计,您可以找到描述实体、实体属性和相互关系符号,圆角矩形和连接器(具有不同端点样式)。 什么时候画ER图? 什么时候画erd ?... 也称为FK,是对表主键引用。它用于标识实体之间关系。注意,不一定是唯一。多条记录可以共享相同值。下面的ER关系图示例显示了一个具有一些列实体,其中外用于引用另一个实体。...在ER图中,基数表示为连接器两端鱼尾纹。三种常见基本关系是一一、一。 一基数例子 一关系主要用于将一个实体一分为二,以提供简明信息并使其更易于理解。...基数例子 关系是指两个实体X和Y之间关系,其中X可以链接到Y多个实例,反之亦然。下图显示了一个关系示例。注意,在物理ERD关系被分割为一关系。...例如,“可能存在于逻辑或物理数据模型,但在概念数据模型,它们只是作为没有基数关系显示。 概念数据模型示例 ?

4.8K21

Laravel关系详解【文章 - 标签】

前言 今天弄了一天关于文章功能,其中主要卡在文章与标签关系纠结。卡了半天,终于算是解决了,不是很完美,但可以。 新建迁移文件 关系,需要三张。...这是我是文章【articles】、标签【tags】以及关系【article_tag】 其中关系命名是[article_tag]而不是tag_article 因为laravel默认是以字母升序排列...这里有,但是是其他,不关我们这里要讲。 新建标签 php artisan make:model Model/Tag -m 我是新建模型时候就顺带穿件迁移了。 ?...这里有两个,分别是文章主键和标签主键。...后来经过查阅多方资料以及官方文档,才发现,想要标签值唯一,而关系通过tag_id来标记不能这样写。

1.8K00

Laravel Eloquent 模型关联关系(下)

在前面两篇教程,学院君陆续给大家介绍了 Eloquent 模型类支持七种关联关系,通过底层提供关联方法,我们可以快速实现模型间关联,并且进行关联查询。...如果是要更新新创建模型实例所属模型(父模型)字段,比如以 posts 为例,新增记录想要更新 user_id 字段,可以这么实现: $user = User::findOrFail(1);...多关联绑定与解除 在插入多关联记录时候,可以通过上面一多关联记录插入方式。...: 结语 好了,关于关联关系我们就介绍到这里,我们分了三篇篇幅来介绍 Eloquent 模型管理关系,回顾一下,主要包含以下内容: 七种关联关系定义:一一、一、远层一、一多态关联...、一多态关联、多态关联; 以上关联关系查询,主要包含两种方式:懒惰式加载和渴求式加载; 基于关联查询构架复杂查询查询结果进行过滤; 关联模型更新、插入和删除操作。

19.5K30

3分钟短文:说说Laravel模型还算常用2个“关系

引言 上一章我们介绍了比较简单laravel模型关联关系一,介绍了关联操作方法。...belongsTo 关系 正好像对于一个词语,找到对应反义词,或者说有一个图片,找到其镜像图片这样。 有作用力,就有反作用力。一关系模型,A有一个B,则反过来,B属于一个A。...一关系 还有一个常见关联关系是一。比如一个用户有多个手机号,一种状态包含很多个事件,一个商品有多个标签等等等等, 这都是一常见用法。...我们说关联关系需要,所以需要手动在events内追加一个字段 state_id,用于指向刚才创建statesid字段。...写在最后 本文不失简单地介绍了belongsTo和hasMany两个关联关系,这在代码仅次于hasOne关系, 使用频次比较高。而效率也就是根据查询一次SQL消耗而已。

2.1K31

3分钟短文:Laravel模型一一一关系真的乱吗?

引言 laravel模型不但提供了可供数据库操作增删改查,还附加了很多功能,最关键要数模型关联关系。本文说一说简单一,和一关系。用代码说话,让大家更直观地理解。...,且内有一个字段名 contacts_id 作为。...如果这个不是 contacts_id,那就手动指定: return $this->hasOne(PhoneNumber::class, 'owner_id'); 使用 phone_numbers ...$contact->orders->reduce(function ($carry, $order) { return $carry + $order->amount; }, 0); 一也有反向关系...写在最后 本文通过常用用户,通讯录,订单,手机号等模型数据,演示了laravel模型一一 关联使用方法。 Happy coding :-)

2K30

JPA实体类注解

确定维护关系,都是通过中间,这样两端就都是与中间表形成一!...joinColum指关系维护端本身 总结 关系被维护端用mapperBy来定义关系 关系维护端用joinColum来指定键名称,维护或者是@JoinTable通过中间维护关系 *ToOne...表示一个映射,该注解标注属性通常是数据库  optional:是否允许该字段为null,该属性应该根据数据库约束来确定,默认为true  可选  fetch:表示抓取策略,....多关联上是两个一多关联,但是在ManyToMany描述,中间是由ORM框架自动处理  可选  targetEntity:表示多关联另一个实体类全名,例如:package.Book.class...@ManyToMany注解需要指定mappedBy属性,指向targetEntity集合属性名称  利用ORM工具自动生成除了User和Book,还自动生成了一个User_Book,用于实现多关联

3.8K70

3分钟短文:Laravel 模型一一关联关系这俩啥区别

引言 本期我们把目光投向laravel模型关联关系上。...因为关联关系第二个,第三个参数,根本没有填写。所以这样对比是不直观。 hasOne 和 belongsTo 最大不同,是哪一方持有关系。...return $this->hasOne('Car'); } } 然后就是 Car 到 User 关系为 user_id,定义关联关系: class Car extends Model...return $this->belongsTo('User', 'user_id', 'id'); } } 所以,反向关系无关于原始一,或者一,因为数据库内存储了,所以使用这个...写在最后 本文通过几个实例介绍了数据库模型一,一,以及反向关联关系, 大家记住一点,belongsTo 是根据当前存储,去主表内查找记录,而且是返回一个模型对象,或者null。

2.7K20

Extreme DAX-第 2 章 模型设计

关系型数据库一样,您可以将具有唯一列称为主键列(primary key column),将具有非唯一列称为列(foreign key column)。...图2.10 通过中间实现关系 3.基数 模型默认关系是一关系,其中一个包含一个唯一主键,另一个包含与相同值,这些值并不是唯一。...此关系属性正式叫法是基数(Cardinality)。 关系也可以有其他基数。将一关系两个位置换一下就是关系关系可以具有一基数,这意味着在关系两端,都是唯一。...通过列,事实与那些描述事实不同实体(客户、产品、成本中心、学生、日期等)建立关系。...4.使用关系 您应该不惜一切代价去避免一件事是:在两个事实之间建立直接关系。由于事实很少包含具有唯一值列,因此一般而言这个关系具有基数。

3.4K10
领券