2016-05-12 54 views
0

大多数人可能都是自己想出来的,但我是一个完全noob,所以我会为了其他noob而给这个问题一个镜头。标记系统中的taggable_id是什么?

我试图设置laravel-tagging,这是一个用于Laravel框架的标记系统,它可能与任何其他标记系统具有相似的结构。它配备了2个表:

  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的作用?

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

回答

1

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

想象你有PostComment模型,他们都可以有tags

您必须只使用一个表。

而且taggable_id栏将有信息或评论的ID值,而taggable_type列将包含所属模型的类名

0

得益于whyguy的答案,我能找出什么taggable_idtaggable_type是以及如何使用它们。在我写这篇文章时,似乎Laravel是利用多态关系的少数主要框架之一。但是,尽量减少实现数据库模式所需的代码量似乎非常有用。

对于任何人在Laravel的多态关系感到困惑,here is a youtube video,我发现有帮助和here is a piece of Laravel documentation关于它。