大多数人可能会自己解决这个问题,但我是一个彻头彻尾的傻瓜,所以为了其他傻瓜,我会尝试一下这个问题。
我正在尝试建立laravel标记,一个用于laravel框架的标记系统,它可能与任何其他标记系统具有类似的结构。它有两张桌子:
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
的用途?
如果这个问题不合时宜,我深表歉意。
这是Polymorphic Relation
,这种关系允许一个模型在单个关联上属于多个其他模型。
假设你有Post
和Comment
型号,它们都可以有tags
。
两者只能使用一张表。
taggable_id
列将具有帖子或评论的ID值,而taggable_type
列将包含所属模型的类名
多亏了whyguy的回答,我才弄清楚taggable_id
和taggable_type
是什么以及如何使用它们。在我写这篇文章的时候,Laravel似乎是少数几个利用多态关系的主要框架之一。但是,在最小化实现数据库模式所需的代码量方面,它似乎非常有用。
对于任何被Laravel中的多元规范关系弄糊涂的人来说,这里有一个我觉得很有帮助的youtube视频,还有一段关于它的Laravel文档。