2009-09-10 28 views
0

實施設備系統我試圖大多是創建一個基於CakePHP的網頁遊戲的做法以及爲它的樂趣,但我遇到了一個難題,試圖找出一個設備系統。如何在CakePHP中

我有一個包含所有有關項目的可能的信息,包括包含一個整數值確定的項目類型是什麼,並導致約使用項目,其信息的ITEM_TYPE領域的項目表。

即ITEM_TYPE =「1」意思是該項目是使用一個帽子,這意味着只有功率,價格,獎金和要求是必要的信息。這一切工作正常。

我也有一個items_users HABTM表,以便存儲所有的每個玩家都有,這也工作正常,由於現有的項目設置。

我想弄清楚的是設備系統如何工作。我首先想到的配備表,例如:

CREATE TABLE `aevum_tf`.`equips` (
`id` INT NOT NULL , 
`user_id` INT NOT NULL , 
`hat_id` INT NOT NULL , 
`wep_id` INT NOT NULL , 
`offhand_id` INT NOT NULL , 
`pants_id` INT NOT NULL , 
`acca_id` INT NOT NULL , 
`accb_id` INT NOT NULL , 
`accc_id` INT NOT NULL , 
`shirt_id` INT NOT NULL , 
`created` DATETIME NOT NULL , 
`modified` DATETIME NOT NULL , 
PRIMARY KEY (`id`) , 
UNIQUE (
`user_id` 
) 
) ENGINE = InnoDB 

與使用這種系統這是CakePHP的不支持多外鍵的模型的唯一問題。

有沒有人有任何想法如何實施這樣的系統?

編輯 items_users現有的HABTM表用於存儲用戶當前擁有的項目。每次用戶獲取新項目時,都是id,用戶的id存儲在items_users表中。我只是想弄清楚如何實現一個設備系統。

到不支持多個外鍵,我的意思是CakePHP的本身並不支持多個外鍵從一個表中的另一個表。我的例子裝備表有8個外鍵,都指向item_id的。

看到:https://trac.cakephp.org/ticket/1923

+0

請說明「不支持多個外鍵」。你可以有任意多的外鍵,也許只是不在HABTM表中。 – deceze

回答

3

我發現HABTM關係是最簡單的關係,而不是複雜的像你上面描述。 HABTM關係的想法是使連接表幾乎不可見,所以你不必維護額外的外鍵。它適用於簡單的情況。

在你的情況,你有裝備表將加入到所有的系統的其他方面。在設計中,你需要一個起點。我會想象「用戶」將是那個起點,用戶會有很多裝備。您可能會限制用戶只有一個裝備,這幾乎可以讓用戶合併並將表格合併爲一個裝備。

無論如何,您需要從定義規則開始。

用戶 - > HasOne - >裝備 裝備 - >屬於關聯 - >用戶

根據你的數據庫deisgn,它看起來像下面的關係將作出。 裝備 - >屬於關聯 - >帽子 裝備 - >屬於關聯 - >褲 裝備 - >屬於關聯 - > WEP WEP - >的hasMany - >裝備 ...

打造最好的應用程序,我的建議是建立每一個可能的關係,並從每個視圖看結果數據集...

$this->User->recursive = 2; 
pr($this->User->find("first"); 

從那裏我會重新設計表,以獲得一個結構,看起來不錯,有道理。然後修剪不必要的關係。

還花一些時間尋找綁定和解除綁定模型。一旦數據庫設計穩定,這將允許您更有效地定製數據和關係。

希望這會有所幫助。

+0

是的,我想不出任何其他方式簡單,沒有一個非常複雜的項目來裝備關係。我可能會將項目表分成不同的項目類型組,看看它是如何工作的。 –