大多数人可能会自己解决这个问题,但我是一个总菜鸟,所以我会为了其他新手而给这个问题一个机会。
我正在尝试设置laravel-tagging,一个Laravel框架的标记系统,它可能与任何其他标记系统具有相似的结构。它有2个表:
tagging_tags
tagging_tagged
tagging_tags
是存储标记的位置。
tagging_tagged
可能是存储标记文章的地方,但我不确定。
表tagging_tagged
包含一列taggable_id
,它不作为主键而且没有自动增量:
Field Type Null Key Default Extra
'id', 'int(10) unsigned', 'NO', 'PRI', NULL, 'auto_increment'
'taggable_id', 'int(10) unsigned', 'NO', 'MUL', NULL,
'taggable_type', 'varchar(255)', 'NO', 'MUL', NULL,
'tag_name', 'varchar(255)', 'NO', NULL,
'tag_slug', 'varchar(255)', 'NO', 'MUL', NULL,
taggable_id
是否是标记文章的外键?那不是tagged_id吗?任何人都可以向我指出一些解释标记系统结构的新手指南,或者只是解释taggable_id
的用途吗?
如果这个问题不合适,我道歉。
答案 0 :(得分:2)
这是Polymorphic Relation
,这种关系允许模型属于单个关联上的多个其他模型。
想象一下,您拥有Post
和Comment
个模型,并且它们都可以tags
。
你必须只使用一个表。
taggable_id
列将包含帖子或评论的ID值,而taggable_type
列将包含所属模型的类名
答案 1 :(得分:0)
感谢whyguy的回答,我能够弄清楚taggable_id
和taggable_type
是什么以及如何使用它们。在我写这篇文章时,似乎Laravel是利用多态关系的少数几个主要框架之一。但就最小化实现数据库模式所需的代码量而言,它似乎非常有用。
对于那些对Laravel中的多态关系感到困惑的人,我发现here is a youtube video对我有帮助,here is a piece of Laravel documentation对此有所了解。