laravel多态多态性关系中的“ morphtomany”和
`emphtomany)''之间的差异主要在于它们在关系中的作用以及数据库结构如何支持它们。
###数据库结构多态多态
多态性的多态关系涉及三个主要表:
- 两个型号表(例如,``post's and`tags'')
- 一个中间枢轴表(例如,`taggables`)
枢轴表至少包含三列:
- `tag_id`(相关模型的ID,例如标签)
- `taggable_id`(与标签相关的模型的ID,例如,帖子或视频)
- `taggable_type`(相关模型的类名称或类型
该结构允许单个枢轴表将多个不同模型与通用模型(在这种情况下为标签)相关联,而无需为每个模型组合使用单独的枢轴表[5] [9]。
###“ morphtomany”的角色
- 在“拥有”或“具有”多态关系的模型上使用。
- 从与许多其他模型相关的模型的角度来定义关系。
- 例如,在``post
post'''模型中使用`tags()`方法使用``emphtomany''获取与该帖子关联的所有标签。
- 此方法指定相关模型和“变形名称”(例如'taggable''),该模型对应于枢轴表列(`taggable_id`和taggable_type`)。
- 它通过当前模型的ID和类型查询枢轴表滤波,以查找相关模型[5] [9]。
###``orphedbymany''的角色
- 在模型上使用,这是多态关系的目标。
- 定义多态多态关系的反向。
- 例如,在``标签模型''中,诸如``posts()````pers)'orphedbymany的方法了,以获取与该标签相关的所有帖子或视频。
- 它指定了相关的模型类和“ morphtomany”中使用的相同的变形名称。
- 此方法通过相关模型的类型和ID查询枢轴表滤波,以查找与当前模型(TAG)[5] [9]相关的所有模型。
###数据库术语差异摘要
- 在与许多其他许多相关的模型上调用了`morphtomany`,并且使用枢轴表列`taggable_id'和`taggable_type`以过滤记录`taggable_type''匹配当前模型的类别。
- 在与(逆)相关的模型上调用了`morphedbyMany``都调用了,并且它使用枢轴表来查找与当前模型相关的特定类型的所有模型。
两种方法都使用相同的枢轴表,但在它们代表的关系方向上有所不同。枢轴表保持不变,带有相关模型的ID和类型的列,允许多种模型类型通过单个表链接多态。
从本质上讲,``morphtomany''定义了“父”或“拥有”模型方面的关系,而``emphedbymany''定义了从“相关”模型方面的反相关关系,都依靠相同的多态透视表结构[5] [9] [1]。
引用:
[1] https://laracasts.com/discuss/channels/laravel/difference-between--standard-polymormorplic-many-to-many-to-many-polymormorphoric
[2] https://www.sitepoint.com/eloquents-polymormorphic-reclations-explaining/
[3] https://laraveldaily.com/post/laravel-polymorphic-many-to-many-get-get-all相关记录
[4] https://laracasts.com/discuss/channels/eloquent/polymorphic-many-to-many-relation-to-multiple-models
[5] https://laravel.com/docs/11.x/eloquent-realationships
[6] https://docs.octobercms.com/3.x/extend/database/relations.html
[7] https://simple-code.agency/blog/development/simplifying-many-to-many-relationships-with-with-laravel-polymormormormormormorporic-ressation
[8] https://stackoverflow.com/questions/68073778/laravel-polymorphic-many-to-many to-many-to-pivot-pivot-table-table-with-with-with-with-with-with-with-with-to-a-a
[9] https://blog.logrocket.com/polymorphic-realationshiphips-laravel/