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

如何在Laravel中获得多态多对多关系中的变形类型

在Laravel中,可以通过多态多对多关系来实现不同模型之间的灵活关联。在这种关系中,一个模型可以同时属于多个不同类型的模型,并且这些不同类型的模型之间也可以相互关联。

要在Laravel中获得多态多对多关系中的变形类型,可以按照以下步骤操作:

  1. 定义多态关联关系: 首先,在包含多态多对多关系的模型中,使用morphToMany方法定义多态关联关系。该方法接受三个参数:关联的目标模型,中间表的表名和中间表中用于关联目标模型的键名。
代码语言:txt
复制
public function morphToMany($related, $name, $table = null, $foreignPivotKey = null, $relatedPivotKey = null, $parentKey = null, $relatedKey = null, $relationName = null, $inverse = false)
  1. 定义中间表和额外字段: 在数据库中创建一个中间表,用于存储多态关联关系。中间表需要包含源模型和目标模型的外键,以及一个用于表示变形类型的字段。可以使用unsignedBigInteger方法定义外键字段。
代码语言:txt
复制
Schema::create('model_tag', function (Blueprint $table) {
    $table->unsignedBigInteger('model_id');
    $table->unsignedBigInteger('taggable_id');
    $table->string('taggable_type');
});
  1. 获取变形类型: 要获取多态多对多关系中的变形类型,可以使用morphType属性。该属性返回与关联模型相关的变形类型名称。
代码语言:txt
复制
$model->taggable_type;

通过以上步骤,就可以在Laravel中获得多态多对多关系中的变形类型。根据具体的业务场景,可以灵活使用这种关系来建立模型之间的关联,并进行相应的数据操作。

腾讯云相关产品推荐:腾讯云云数据库MySQL、腾讯云云服务器CVM、腾讯云对象存储COS等。更多产品介绍和详细信息,请访问腾讯云官方网站:https://cloud.tencent.com/

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

相关·内容

Hibernate 中 一对多、多对一、 关联关系的 配置

one-to-many : 表明 tblFwxxes 集合中存放的是一组 TblFwxx 对象。 ---- 其中: inverse: 表示关系的维护由谁来执行。...not-null="true" /> ---- 对于双向多对多关系...在数据库设计时,需要设计一个中间表 teacher_student ,通过中间表描述学生表和老师表的多对多关系。...其映射文件配置方式与一对多很类似,也需要一个 class 属性来设置关联的属性的类型,column 属性用来设定哪个字段去做外键关联,最后,根据业务需要,将某一方的inverse 属性设置为false。...---- 1、这里比一对多关联多一个 table 属性,table 指向数据库建立的关联的那张表。 2、Key 中的 column : 关联表中和 student 表发生关系的字段。

3.1K20

还得再来聊聊Laravel中的对多对模型的一些事

前言 之前,在文章:https://www.misiyu.cn/article/58.html 已经发过关于Laravel中的多对多关系了。 但回过头来,过了个把月再去看,我自己都忘了怎么写了。...确实看laravel的中文文档,看得糊里糊涂的。还是得在实践中理解啊。 情景假设 我有一张来源表(referers)来记录href和网页标题title。...目前需求是信息表里面的多个信息可能同属于来源表中的一条记录。 同样,来源表中的多条信息可能属于信心表中的一条记录。 简言之就是,这是多对多的关系。 细节 新建迁移文件就不说了。...注意: 1、你想要有其他字段也行,我们这里讨论最简单的情况。 2、第三张表的命名有要求,主要是Laravel默认情况的关系。...当然,搞不懂默认关系,我们在模型关联的时候指定表明就行。

1.6K00
  • JDBC上关于数据库中多表操作一对多关系和多对多关系的实现方法

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

    3.6K70

    Redis中处理频道与订阅者之间的多对多关系,它与消息队列的异同之处

    图片在Redis中,可以使用发布-订阅(Pub/Sub)模式来处理频道与订阅者之间的多对多关系。首先,使用命令SUBSCRIBE订阅一个或多个频道,让订阅者关注感兴趣的频道,并接收推送的消息。...此时,订阅者A就可以收到来自频道channel1的消息"Hello, World!"。Redis支持多对多关系,即一个频道可以有多个订阅者,一个订阅者也可以订阅多个频道。...可以使用如下示例表示多对多关系的处理过程:订阅者A:执行命令 - `SUBSCRIBE channel1`订阅者B:执行命令 - `SUBSCRIBE channel1`发布者B:执行命令 - `PUBLISH...都可以实现消息的可靠传递机制。不同点:数据结构不同:Redis的发布与订阅机制是基于发布与订阅的模型,消息队列是基于队列的结构。...顺序性不同:Redis的发布与订阅机制不保证消息的顺序传递,而消息队列可以保证消息的有序传递。重试机制不同:Redis的发布与订阅机制不支持消息的重试机制,而消息队列可以通过重试机制来处理失败的消息。

    45251

    一种 Laravel 中简单设置多态关系模型别名的方式

    作为 Laravel 的重度使用者肯定都对多态关系不陌生,以官方文档为例,文章有标签,视频有标签,那么文章和视频这些模型与标签模型的关系就是多态多对多(Many To Many (Polymorphic...思路来源 我尝试跟踪了一遍源码,发现模型中有一个方法 getMorphClass,多态关联的时候,就是用它来取目标对象的类型名称的,默认返回类名: public function getMorphClass...》[2] 我们的目标是使用表名来做为关系类别名,那么在模型中如何获取表名呢,直接使用模型的 getTable 即可,那么整个 trait 的实现如下: app/Traits/UseTableNameAsMorphClass.php...UseTableNameAsMorphClass { public function getMorphClass() { return $this->getTable(); } } 然后在我们需要用到关系类型的模型中引入它即可...References [1] 多态多对多(Many To Many (Polymorphic)): https://laravel.com/docs/6.x/eloquent-relationships

    2.7K10

    Laravel学习记录--Model

    多态关联 - 多态一对 - 多态一对多 - 多态多对 关联查询 继承:ILLuminate\Database\Eloquent\Model model与表名的关系...Model关联 一对一 一对多 渴求式加载 多对多 远层一对多 多态关联 多对多多态关联 一对一 1:1最基本的关联关系 ,如一个User模型关联一个Phone模型,为了定义此关联,我们需在User模型定义一个...学习了一对一多态关联,一对多多态关联相对简单,实际上原理跟一对一多态差不多,只是这里变成了一对多而已 下面举例说明,以评论来说,文章跟评论的关系是一对多,可能我们的系统里面 还会针对某个模块设置评论窗口...学到了这里,理解多态多对多也不是很难了,还是举例说明,文章与标签的关系,多对多这个大家知道,因此我们需要建立文章表与标签表,以及中间表,中间表存放文章与标签表的id使他们建立连接,这是常规套路,但如果我们的系统大一点...这样或许也行吧,或许有更方便的办法—就是马上要学习的多态多对多,多态多对多也是需要中间表,与常规多对多差不多,只是中间表需要_type(模型类型字段),_id(关联模型id) 话不多说直接上案例 我们要实现的功能是

    13.6K20

    Php Laravel框架 多表关系处理 之 Eloquent一对多关系处理

    Php Laravel框架 多表关系处理 之 Eloquent一对多关系处理 本博文主要介绍 Laravel 框架中 Eloquent 对一对多关系的处理以及在 Laravel Administrator...Laravel 提供了四种类型的关系: –一对一 –一对多 –多对多 – 多态关系 一对多 一个一对多关系的样例是一篇博客文章有很多评论或者一个课程有的多次分数信息等。...* 而且是一对多的关系 */ public function StuInfo(){ return $this -> belongsTo...> 通过以上步骤的处理。表与表之间的一对多关系已确立, 以下将介绍在Laravel Administrato 后台中的实现 下拉列表查询、绑定等应用 中多次使用到 “学生姓名”、“课程名”,尽管他们存储在不同的表中,但因为我们之前在 Model中已建立了它们之间的 一对多关系,因此我们能够自由搭配组合 效果图例如以下: 10个Laravel4

    2.1K40

    面向对象的三大特性

    继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类 python中类的继承分为:单继承和多继承 1 class ParentClass1...例1:利用标准库中定义的各种‘与文件类似’的对象,尽管这些对象的工作方式像文件,但他们没有继承内置文件对象的方法 例2:序列类型有多种形态:字符串,列表,元组,但他们直接没有直接的继承关系 封装 【封装...将不需要对外提供的内容都隐藏起来;       2. 把属性都隐藏,提供公共方法对其访问。..._A__N是可以访问到的,即这种操作并不是严格意义上的限制外部访问,仅仅只是一种语法意义上的变形 这种自动变形的特点: 1.类中定义的__x只能在内部使用,如self.__x,引用的就是变形的结果。...3.在子类定义的__x不会覆盖在父类定义的__x,因为子类中变形成了:_子类名__x,而父类中变形成了:_父类名__x,即双下滑线开头的属性在继承给子类时,子类是无法覆盖的。

    67060

    面向对象的三大特性(封装、继承、多态)

    ,这样就重用了已经有的软件中的一部分设置大部分,大大生了编程工作量,这就是常说的软件重用,不仅可以重用自己的类,也可以继承别人的,比如标准库,来定制新的数据类型,这样就是大大缩短了软件开发周期,对大型软件开发来说...1.多继承问题 在继承抽象类的过程中,我们应该尽量避免多继承; 而在继承接口的时候,我们反而鼓励你来多继承接口 接口隔离原则: 使用多个专门的接口,而不使用单一的总接口。...比如:老师.下课铃响了(),学生.下课铃响了(),老师执行的是下班操作,学生执行的是放学操作,虽然二者消息一样,但是执行的效果不同 多态性分为静态多态性和动态多态性   静态多态性:如任何类型都可以用运算符...例1:利用标准库中定义的各种‘与文件类似’的对象,尽管这些对象的工作方式像文件,但他们没有继承内置文件对象的方法 例2:序列类型有多种形态:字符串,列表,元组,但他们直接没有直接的继承关系 #二者都像鸭子..._A__N是可以访问到的,即这种操作并不是严格意义上的限制外部访问,仅仅只是一种语法意义上的变形 这种自动变形的特点: 1.类中定义的__x只能在内部使用,如self.__x,引用的就是变形的结果。

    4.2K90

    Laravel Eloquent 模型关联关系(下)

    另外,如果访问的是模型实例上的 author() 方法时,返回的不是用户实例了,而是一个关联关系实例,该实例注入了查询构建器,所以你可以在其基础上通过方法链的方式构建查询构建器进行更加复杂的查询,我们以一个一对多的查询为例...Eloquent 允许我们为这种空对象定义一个默认的类型,这个对象的类型可以在定义关联关系的时候指定: public function author() { return $this->belongsTo...多对多关联的绑定与解除 在插入多对多关联记录的时候,可以通过上面一对多关联记录插入的方式。...: 结语 好了,关于关联关系我们就介绍到这里,我们分了三篇的篇幅来介绍 Eloquent 模型的管理关系,回顾一下,主要包含以下内容: 七种关联关系的定义:一对一、一对多、多对多、远层一对多、一对一的多态关联...、一对多的多态关联、多对多的多态关联; 以上关联关系的查询,主要包含两种方式:懒惰式加载和渴求式加载; 基于关联查询构架复杂查询对查询结果进行过滤; 关联模型的更新、插入和删除操作。

    19.6K30

    深入理解 Laravel Eloquent(三)——模型间关系(关联)

    一对一关系 顾名思义,这描述的是两个模型之间一对一的关系。这种关系是不需要中间表的。...多对多关系和之前的关系完全不一样,因为多对多关系可能出现很多冗余数据,用之前自带的表存不下了。...我们定义两个模型:Article 和 Tag,分别表示文章和标签,他们是多对多的关系。表结构应该是这样的: article: id ... ... tag: id ... ......其他关系 Eloquent 还提供 “远层一对多关联”、“多态关联” 和 “多态的多对多关联” 这另外三种用法,经过上面的学习,我们已经掌握了 Eloquent 模型间关系的基本概念和使用方法,剩下的几种不常用的方法就留到我们用到的时候再自己探索吧...重要技巧:关系预载入 你也许已经发现了,在一对一关系中,如果我们需要一次性查询出10个 User 并带上对应的 Account 的话,那么就需要给数据库打 1 + 10 条 SQL,这样性能是很差的。

    2.7K30

    面向对象之封装

    私有变量和私有方法 私有变量定义: 在python中用双下划线开头的方式将属性隐藏起来(设置成私有的) #其实这仅仅这是一种变形操作 #类中所有双下划线开头的名称如__x都会自动变形成:_类名__x的形式..._A__N是可以访问到的,即这种操作并不是严格意义上的限制外部访问,仅仅只是一种语法意义上的变形 私有变量的特点及注意事项 特点 1.类中定义的__x只能在内部使用,如self....3.在子类定义的__x不会覆盖在父类定义的__x,因为子类中变形成了:_子类名__x,而父类中变形成了:_父类名__x,即双下滑线开头的属性在继承给子类时,子类是无法覆盖的。...定义: 什么是多态动态绑定(在继承的背景下使用时,有时也称为多态性)多态性是指在不考虑实例类型的情况下使用实例 在面向对象方法中一般是这样表述多态性: 向不同的对象发送同一条消息(!!!...例1:利用标准库中定义的各种‘与文件类似’的对象,尽管这些对象的工作方式像文件,但他们没有继承内置文件对象的方法 例2:序列类型有多种形态:字符串,列表,元组,但他们直接没有直接的继承关系 示例

    52310

    【JAVA-Day62】Java继承:面向对象编程中重要的基石

    实现继承的方式 单继承与多继承 Java只支持单继承,即一个子类只能有一个直接的父类。这是为了避免多继承可能引发的复杂性和歧义。然而,可以通过接口实现多继承的效果。...子类与父类关系 子类扩展父类 子类可以通过继承来获得父类的方法和属性,并且可以添加额外的功能。这种机制提高了代码的重用性和可维护性。 方法重写 子类可以重写(覆盖)父类的方法来实现自己的行为。...这种特性被称为多态性,让不同类型的对象可以对相同的消息作出不同的响应。...继承与多态的关系 方法重写与多态 深入探讨方法重写在多态性中的作用。通过在子类中重写父类方法,实现对相同方法的不同实现,从而实现多态性。...讨论在Java中如何防止某个类被继承的方法。 3. 继承与多态性 多态性如何在继承中实现? 解释多态性在继承中的作用,以及如何通过方法重写实现多态。 向上转型和向下转型是什么?

    12910

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

    到目前为止,我们介绍的所有 Eloquent 模型操作都是针对单表的,接下来我们将花三篇左右的篇幅来给大家介绍如何在 Eloquent 模型类中建立模型之间的各种关联关系,以及如何实现关联查询和更新。...Eloquent 模型支持的关联关系包括以下七种: 一对一 一对多 多对多 远层一对多 多态关联(一对一) 多态关联(一对多) 多态关联(多对多) 下面我们将以设计一个简单的博客系统数据库为例一一介绍上述关联关系...比如在大型系统中,我们的用户表通常用于最基本信息的存储,如邮箱、用户名、密码等,然后像用户爱好、标签、个性签名、所在地等信息都存到另一张扩展表中,需要的时候才会去扩展表取数据,从而提高查询性能。...一对多 建立关联关系 一对多关联是我们日常开发中经常碰到的一种关联关系。...建立相对的关联关系 与之前的关联关系一样,多对多关联也支持建立相对的关联关系,而且由于多对多的双方是平等的,不存在谁归属谁的问题,所以建立相对关联的方法都是一样的,我们可以在 Tag 模型中通过 belongsToMany

    10K40

    从0开始做一个审批模块

    所以这个需求方,可以定义为多态的,说的通俗一点就是通过类型和 ID 来决定对象。不过这里我并没有定义为多态,因为应用里面不会出现需求方不确定类型的场景,还是继续沿用 creator_id。...从上面的需求场景中我们可以看出,被申请的对象可能是团队也可能是项目,也就是被申请对象不确定,和上面的不确定的需求方是等同的;且一个被申请对象可以被不同的需求方申请多次,也就是典型的 一对多多态关联[1]...('review', $apply); $apply->markAsRejected(); return \response()->noContent(); } } ‍对多态关系的表单验证不太清楚的可以戳这里...:『Laravel 中多态关系的表单验证[3]』 。...[2] Laravel: https://laravel.com/ [3] Laravel 中多态关系的表单验证: https://learnku.com/articles/12449/form-validation-of-polymorphic-relationships-in-laravel

    1.7K10

    Laravel源码分析之模型关联

    说了这么多下面我们就通过实际示例出发深入到底层看看模型关联是如何解决数据关联匹配和加载关联数据的。 在开发中我们经常遇到的关联大致有三种:一对一,一对多和多对多,其中一对一是一种特殊的一对多关联。...我们通过官方文档里的例子来看一下Laravel是怎么定义这两种关联的。 一对多 class Post extends Model { /** * 获得此博客文章的评论。...多对多 多对多关联不同于一对一和一对多关联它需要一张中间表来记录两端数据的关联关系,官方文档里以用户角色为例子阐述了多对多关联的使用方法,我们也以这个例子来看一下底层是怎么来定义多对多关联的。...WHERE role_user.user_id = 1 远层一对多 Laravel还提供了远层一对多关联,提供了方便、简短的方式通过中间的关联来获得远层的关联。...还有一些我认为使用场景没那么多的多态关联、嵌套预加载那些我并没有梳理,并且它们的底层实现都差不多,区别就是每个关联类型有自己的关联约束、匹配规则,有兴趣的读者自己去看一下吧。

    9.6K10

    为什么 Laravel 这么优秀?

    接下来我们将尝试构建一个简易的课程系统,在这个系统中有教师(Teacher),学生(Student)和课程(Course),它们之间覆盖了简单的一对一、一对多、多对多等的关系,这在日常开发中也很常见。...因为我们已经完成了数据表中字段的定义、表与表的关系、以及最重要的一步:如何将数据及数据之间的关系写入数据库中,下面简单的来介绍下在 Laravel 是如何完成的。...,我们就可以非常方便的通过 Laravel Eloquent 查询它们之间的数据关系。...强大的的辅助函数和丰富的 API,在下面的代码中我们甚至可以做到一行代码就完成课程的创建及依赖关系的更新。...中可以高效的使用 Eloquent ORM 实现各种查询;如上面的例子中我们使用了 withCount 来查询课程的学生数量、用 with 加载课程对应的教师;还可以指定生成的 SQL 查询只包含某几个字段如

    26710

    PHP面试题集锦

    阅读量: 9 php如何实现多继承? trait的出现就是一种解决需要多继承场景的方式。...如laravel中的 _token 4、代码注入:代码注入是利用计算机漏洞通过处理无效数据造成的。问题出在,当你不小心执行任意代码,通常通过文件包含。写得很糟糕的代码可以允许一个远程文件包含并执行。...(1)开放封闭原则:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。 (2)里氏替换原则:所有引用基类的地方必须能透明地使用其子类的对象。...3、多态性:子类继承了来自父级类中的属性和方法,并对其中部分方法进行重写。于是多个子类中虽然都具有同一个方法,但是这些子类实例化的对象调用这些相同的方法后却可以获得完全不同的结果,这种技术就是多态性。...4、易扩展 由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展,而且成本较低。 JSON的数据类型有哪些?

    6.9K20
    领券