Laravel中的“形态性关系”用于定义多到多的多态关系,其中多个模型可以通过多态性中间表与单个模型类型共享关系。这允许许多不同的模型与通用模型的灵活关联,而无需为每个模型对单独的枢轴表。
laravel中的“ morphtomany”的常见用例
** 1。标记系统
最常见的用例之一是实现标签系统,其中可以用相同的标签标记多个不同的模型(例如,帖子,视频,页面)。 “ morphtomany”不用为每个模型标签关系具有单独的枢轴表,而是将所有标签存储在单个标签表中,并与任何模型相关联。
例如,``post''和`视频模型都可以使用`tags()
hormphtomany''检索标签的方法了,``tag'型模型都可以使用`m grophedbymany''获得所有标记的帖子或视频[1] [5] [9]。
** 2。分类各种内容类型
与标签类似,可以在不同的内容类型上共享类别。例如,文章和产品都可能需要分类,并且多态性的多态关系使他们可以共享无冗余表的类别。
** 3。将标签或属性分配给多个模型
如果您具有可以应用于不同型号(例如用户,订单,产品)的标签,属性或功能,则可以使用“ morphtomany”允许您灵活地将这些标签与任何型号类型相关联。
** 4。多种用户类型的用户角色或权限
在具有多种用户类型(例如管理员,客户,供应商)的应用程序中,可以使用“ morphtomany”分配角色或权限,以便在单个表中管理角色,但与不同的用户模型相关[1]。
** 5。将评论或附件链接到多个模型以多种方式链接
虽然评论通常是一对多的多态性,但在某些情况下,有多个评论或附件以多到多种方式与多个模型有关。 `莫夫托米尼可用于建模这种关系。
##``morphtomany''
- 它使用一个枢轴表,例如`taggables`,tag_id`,`taggable_id''和`taggable_type`。
- `taggable_id`和`taggable_type`列允许Laravel确定标签与哪种模型相关联。
- 在相关模型(例如,``post',
`录像')')''上定义了一种返回`$ this-> morphtomany(tag :: class,'taggable')的方法。
- 在`tag`模型上,使用``grophedbymany'''定义逆关系来检索与该标签相关的给定类型的所有模型[1] [5]。
## 概括
当您想以多对多的多态性方式将多个模型与共同模型相关联时,“ morphtomany”是理想的选择。它被广泛用于标记系统,分类,跨多种用户类型的角色分配以及许多不同模型共享一组相关模型的任何情况,而无需每对单独的透视表。
这种方法通过将多态多态关系集中到单个优雅的结构中来简化数据库设计和代码维护。
引用:
[1] https://blog.logrocket.com/polymorplic-relationshiphips-laravel/
[2] https://laraveldaily.com/post/polymorphic-relaver-laravel-open-source-exmples
[3] https://stackoverflow.com/questions/57522923/how-to-use-use-morphtomany
[4] https://stackoverflow.com/questions/43285779/laravel-polymormorplic-realations-has-many-through
[5] https://laravel.com/docs/11.x/eloquent-realationships
[6] https://www.linkedin.com/pulse/complete-guide-polymormorphic-realations-morphs-sajith-madhubashana-rk1xc
[7] https://joedixon.co.uk/a-practical-use-case-for-------------------------------------------
[8] https://stackoverflow.com/questions/58811999/what-are-the-the-the-uses-of-morphs-column-type-in-in-laravel
[9] https://laraveldaily.com/post/laravel-polymorphic-many-to-many-get-get-all相关记录