taggable_id在标签系统中的作用是什么


What is taggable_id for in tagging system?

大多数人可能会自己解决这个问题,但我是一个彻头彻尾的傻瓜,所以为了其他傻瓜,我会尝试一下这个问题。

我正在尝试建立laravel标记,一个用于laravel框架的标记系统,它可能与任何其他标记系统具有类似的结构。它有两张桌子:

  1. tagging_tags
  2. 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,这种关系允许一个模型在单个关联上属于多个其他模型。

假设你有PostComment型号,它们都可以有tags

两者只能使用一张表。

taggable_id列将具有帖子或评论的ID值,而taggable_type列将包含所属模型的类名

多亏了whyguy的回答,我才弄清楚taggable_idtaggable_type是什么以及如何使用它们。在我写这篇文章的时候,Laravel似乎是少数几个利用多态关系的主要框架之一。但是,在最小化实现数据库模式所需的代码量方面,它似乎非常有用。

对于任何被Laravel中的多元规范关系弄糊涂的人来说,这里有一个我觉得很有帮助的youtube视频,还有一段关于它的Laravel文档。