如何在CakePHP中实现设备系统

时间:2009-09-10 01:04:54

标签: database-design cakephp

我正在尝试创建一个基于CakePHP的网页游戏,主要是为了练习以及它的乐趣,但我遇到了一个试图找出设备系统的难题。

我有一个Items表,其中包含有关项目的所有可能信息,包括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

1 个答案:

答案 0 :(得分:3)

我发现HABTM关系最适合简单的关系,而不是像上面描述的复杂关系。 HABTM关系的想法是使连接表几乎不可见,因此您不必维护额外的外键。它适用于简单的情况。

在您的情况下,您拥有可以加入系统所有其他方面的装备表。在设计中,您需要一个起点。我认为“用户”将是起点,用户将拥有许多装备。您可以将用户限制为只有一个装备,这几乎可以合并用户并将表装备成一个装备。

在任何情况下,您都需要从定义规则开始。

用户 - > HasOne - >装备 装备 - > BelongsTo - >用户

根据您的数据库设计,看起来将建立以下关系。 装备 - > BelongsTo - >帽子 装备 - > BelongsTo - >喘气 装备 - > BelongsTo - > WEP Wep - > HasMany - >装备 ...

为了构建最好的应用程序,我建议建立每个可能的关系,并从每个视图中查看结果数据集......

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

从那里我会重新设计表格以获得看起来很好且有意义的结构。然后删除不必要的关系。

还花一些时间研究绑定和解除绑定的模型。这样,一旦数据库设计稳定,您就可以更有效地自定义数据和关系。

希望这会有所帮助。