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

What is taggable_id for in tagging system?

大多数人可能会自己解决这个问题,但我是一个菜鸟,所以为了其他菜鸟,我会试一试这个问题。

我正在尝试设置 laravel-tagging,一个用于 Laravel 框架的标记系统,它可能具有与任何其他标记系统相似的结构。它带有 2 tables:

  1. tagging_tags
  2. tagging_tagged

tagging_tags 是存储标签的地方。

tagging_tagged 可能是存储标记文章的地方,但我不确定。

table 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

两者都只能使用一个 table。

并且 taggable_id 列将包含 post 或评论的 ID 值,而 taggable_type 列将包含所属模型的 class 名称

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

对于任何对 Laravel、here is a youtube video that I found helpful and here is a piece of Laravel documentation 中的多态关系感到困惑的人。