Как внедрить систему оборудования в CakePHP - PullRequest
0 голосов
/ 10 сентября 2009

Я пытаюсь создать веб-игру на основе 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

1 Ответ

3 голосов
/ 10 сентября 2009

Я обнаружил, что отношения HABTM лучше всего подходят для простых отношений, а не для сложных, как вы описали выше. Идея отношения HABTM состоит в том, чтобы сделать таблицу соединений практически невидимой, чтобы вам не приходилось поддерживать дополнительные внешние ключи. Хорошо работает для простых случаев.

В вашем случае у вас есть таблица экипировки, которая объединит все другие аспекты вашей системы. В дизайне вам нужна отправная точка. Я предположил бы, что "пользователь" будет той отправной точкой, и у пользователя будет много экипировки Вы можете ограничить пользователя наличием только одного оборудования, что практически слилось бы с объединением пользователя и объединением таблиц в один.

В любом случае вам нужно начать с определения правил.

Пользователь -> HasOne -> Экипировка Оборудование -> BelongsTo -> Пользователь

Согласно вашей базе данных, похоже, что будут установлены следующие отношения. Оборудование -> BelongsTo -> Шляпа Оборудование -> BelongsTo -> Брюки Оборудование -> BelongsTo -> Wep Wep -> HasMany -> Экипировка ...

Чтобы создать лучшее приложение, я бы посоветовал построить все возможные отношения и взглянуть на результирующий набор данных из каждого представления ...

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

Оттуда я изменил бы таблицы, чтобы получить структуру, которая выглядит хорошо и имеет смысл. Затем обрежьте ненужные отношения.

Кроме того, потратьте некоторое время на изучение моделей привязки и отмены привязки. Это позволит вам более эффективно настраивать данные и отношения после того, как структура базы данных станет стабильной.

Надеюсь, это немного поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...