标记系统中的taggable_id是什么?

时间:2016-05-12 12:38:39

标签: php laravel tagging

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

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

  1. tagging_tags
  2. tagging_tagged
  3. 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的用途吗?

    如果这个问题不合适,我道歉。

2 个答案:

答案 0 :(得分:2)

这是Polymorphic Relation,这种关系允许模型属于单个关联上的多个其他模型。

想象一下,您拥有PostComment个模型,并且它们都可以tags

你必须只使用一个表。

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

答案 1 :(得分:0)

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

对于那些对Laravel中的多态关系感到困惑的人,我发现here is a youtube video对我有帮助,here is a piece of Laravel documentation对此有所了解。