2011-07-20 115 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

連接表的名稱需要包括涉及,按字母順序排列兩種模型的名稱,並用下劃線(_)