Я пытаюсь создать веб-игру на основе CakePHP в основном для практики, а также для удовольствия, но сталкиваюсь с проблемой, пытаясь выяснить систему оборудования.
У меня есть таблица Предметов, которая содержит всю возможную информацию об элементе, включая поле item_type, которое содержит целочисленное значение, определяющее, какой тип элемента, и в результате, какую информацию об элементе использовать.
т.е. item_type = '1' означает, что предмет является шляпой для использования, что означает, что только сила, цена, бонусы и требования являются необходимой информацией. Это все отлично работает.
У меня также есть таблица HABTM items_users, настроенная для хранения всех принадлежащих в настоящее время предметов, которые есть у каждого игрока, это также работает нормально.
Я пытаюсь понять, как будет работать система оборудования. Сначала я подумал о столе для снаряжения, таком как:
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 не поддерживает несколько внешних ключей для модели.
У кого-нибудь есть идеи относительно того, как реализовать такую систему?
РЕДАКТИРОВАТЬ Существующая HABTM таблица items_users используется для хранения элементов, которыми в данный момент владеет пользователь. Каждый раз, когда пользователь получает новый элемент, его идентификатор и идентификатор пользователя сохраняются в таблице items_users. Я просто пытаюсь понять, как реализовать систему оборудования.
Поскольку не поддерживает несколько внешних ключей, я имею в виду, что CakePHP изначально не поддерживает несколько внешних ключей из одной таблицы в другой таблице. В моем примере таблица оборудований имеет 8 внешних ключей, все из которых указывают на идентификаторы item_id.
см .: https://trac.cakephp.org/ticket/1923