我正在尝试创建一个基于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。
答案 0 :(得分:3)
我发现HABTM关系最适合简单的关系,而不是像上面描述的复杂关系。 HABTM关系的想法是使连接表几乎不可见,因此您不必维护额外的外键。它适用于简单的情况。
在您的情况下,您拥有可以加入系统所有其他方面的装备表。在设计中,您需要一个起点。我认为“用户”将是起点,用户将拥有许多装备。您可以将用户限制为只有一个装备,这几乎可以合并用户并将表装备成一个装备。
在任何情况下,您都需要从定义规则开始。
用户 - > HasOne - >装备 装备 - > BelongsTo - >用户
根据您的数据库设计,看起来将建立以下关系。 装备 - > BelongsTo - >帽子 装备 - > BelongsTo - >喘气 装备 - > BelongsTo - > WEP Wep - > HasMany - >装备 ...
为了构建最好的应用程序,我建议建立每个可能的关系,并从每个视图中查看结果数据集......
$this->User->recursive = 2;
pr($this->User->find("first");
从那里我会重新设计表格以获得看起来很好且有意义的结构。然后删除不必要的关系。
还花一些时间研究绑定和解除绑定的模型。这样,一旦数据库设计稳定,您就可以更有效地自定义数据和关系。
希望这会有所帮助。