2011-07-20 76 views
0

我正试图在我的应用程序中实现标签。在数据库中保存标签

tags(id, name) 
tags_relations (id, tag_id, entity_id) 
entity (id, name) 

我这里有一组的4个标签,我想告诉它作为一个catgory

菜式 - >早餐,午餐,晚餐,小吃

这实际上是标签可以对特定实体进行检查或取消选中。

在另一个领域,我允许用户输入标签逗号分隔。

我只想知道哪种方法可以将其保存到数据库中?

我使用CakePHP的框架..

+2

HTTP分隔: //book.cakephp.org/view/1044/hasAndBelongsToMany-HABTM和http://book.cakephp.org/view/1034/Saving-Related-Model-Data-HABTM – JJJ

回答

1

遵循蛋糕标准:

tags(id, name) 
tags_entities (id, tag_id, entity_id) 
entities (id, name) 

再烤3个表和蛋糕会自动分配正确的关系。自动生成的代码将允许您检查和取消选中标记。如果你想“允许用户输入标签逗号”,你需要编写更多的代码来处理它。

+0

这个逻辑代码应该放在标签中型号还是在控制器中? bcos我想检查标签是否存在获取id和插入,否则必须插入标签并获得id,然后插入关系 –

+1

理想情况下,模型,您在哪里执行所有数据库操作。控制器简单地指导控制流程而不知道数据库的详细信息。你可以在Tag模型中编写一个方法findIDs($ tags_str)。并从实体模型中的saveEntity()中调用它以获取标签ID列表。在findIDs()方法中,你也可以有“如果不存在就插入”的逻辑 –

+0

@Harshana:你不需要担心,CakePhp会自动处理它。尽管如此,请参阅Juhana对您的问题的评论,第二个链接 – kaklon

1

连接表应该命名为entities_tags

连接表的名称需要包括涉及,按字母顺序排列两种模型的名称,并用下划线(_)