2011-06-20 49 views
0

我正在開發一個網站,用戶可以在其個人檔案中保存一個項目列表(數組),它們可以在同一個網站中找到並擁有自己的ID) 。使用CakePHP + MySQL存儲數組的替代方案

這是我在類似情況下使用至今的方式: - 創建在數據庫用戶表中的「文本」(串)字段和保存用逗號分隔 的項目 - 要讀的那場,使用爆炸方法來獲得在CakePHP中的數組,然後用它 工作 - 要保存數組到數據庫,使用破滅方法將其轉換爲字符串,並能夠將其存儲在該領域

我不喜歡這種方法,它可以變得非常複雜,處理這些列表(添加項目,刪除項目...),你不能真的訪問這些項目目錄實際上,總會有一些預處理或後期處理。

例如,爲了更容易查看一個用戶列表中的特定項目並查找列表中具有相同項目的其他用戶。

有沒有更好的方法來處理CakePHP + MySQL中的數組?我已閱讀約序列化()/反序列化(),但我不認爲這會產生很大的區別與其他方法相比...

非常感謝您提前任何想法!

回答

0

數據庫表格只是一個龐大的電子表格。但不是在每個單元中存儲一條信息,而是將它們聚集在一個單元中。你絕不會在電子表格中做到這一點。

您應該創建一個項目表是這樣的:

+----+--------+--------+ 
| ID | UserID | ItemID | 
+----+--------+--------+ 
| 1 | 2  | 3  | 
| 2 | 2  | 1  | 
| 3 | 3  | 3  | 
+----+--------+--------+ 

,並可能另一張表:

+----+-------------+ 
| ID | ItemName | 
+----+-------------+ 
| 1 | Mathematics | 
| 2 | Jogging  | 
| 3 | Movies  | 
+----+-------------+ 

這會讓你知道用戶喜歡2電影和數學,以及用戶喜歡3電影。

+0

謝謝克里斯蒂安,我會檢查一下! –

+0

也是一個HABTM關係。 – Dunhamzzz

1

肯定用一個表,以便與克里斯蒂安Antonsen的建議,建立一個項目表,然後在你創建一個hasManu關係用戶模型是這樣的:

class User extends AppModel{ 
    $hasMany = array(
     'Item' 
    ); 
} 

或HABTM關係:

class User extends AppModel{ 
    $hasAndBelongsToMany = array(
     'Item' 
    ); 
} 

使用表單助手爲項目創建輸入。

希望這會有所幫助。

+0

感謝馬特給蛋糕PH「觸摸」他的答案,我會嘗試! –