为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel / PHP-高级多态关系

Laravel / PHP-高级多态关系

PHP
慕斯王 2021-04-27 13:12:49
在我的Web应用程序中,用户可以上传documents或emails到channels。然后,频道可以具有document_tags和email_tags,所有上传的文档/电子邮件应自动继承。此外,document_tags与email_tags 将有不同的描述:tag_descriptions。因此,例如,如果我们有一个文档,该文档上载到具有以下标签的频道:animals (id = 1)和pets (id = 2)Document #55被赞扬为Channel #8。Document #55会自动继承具有的标签document_tags.channel_id = 55(可以通过以下关系进行访问:)$channel->documenttags。在这种情况下animals和pets。现在,用户应该能够为teganimals和pets中的设置唯一的描述tag_descriptions,例如:tag_descriptionsid | taggable_type   | taggable_id  | typeable_type | typeable_id | description1  | App\DocumentTag | 1            |  App\Document | 55          | My unique description for animals. 2  | App\DocumentTag | 2            |  App\Document | 55          | My unique description for pets.现在,在上面的数据库设计中,上载的document #55具有标签:animals和pets相关联,但是,这两个标签具有唯一的描述,对于特定文档而言是唯一的。如果我上传另一个文档或一封电子邮件(假设email #20),那么我可以想象它看起来像:tag_descriptions:id | taggable_type   | taggable_id  | typeable_type | typeable_id | description1  | App\DocumentTag | 1            |  App\Document | 55          | My unique description for animals. 2  | App\DocumentTag | 2            |  App\Document | 55          | My unique description for pets.3  | App\EmailTag    | 1            |  App\Email    | 20          | Another unique description for animals. 4  | App\EmailTag    | 2            |  App\Email    | 20          | Yet another unique description for pets.现在,它们email #20还具有animals和的标签pets,但是在这种情况下,用户可以为标签设置唯一的描述。现在我的问题是:上面的设计可行吗,并且在Laravel / PHP中被认为是最佳实践吗?我有点不确定如何构造代码,因为该TagDescription模型突然会具有两个多态关系(taggable和typeable),并且我在文档中找不到任何支持此关系的东西。此外,我不确定是否可以使用上述设计通过特定的上载文档访问唯一描述,例如://In my Document.php model:public function tagdescriptions(){    return $this->morphMany(TagDescription::class, 'typeable');}然后像这样使用它$document->tagdescriptions。最后但并非最不重要的一点-我有点不确定如何为特定的taggable_id / taggable_type和唯一的电子邮件/文档保存唯一的标签描述。(typeable_id和typeable_type)。
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 113 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信