سؤال

وأنا محاولة لخلق لعبة على شبكة الإنترنت للكيك تستند في معظمها لممارسة فضلا عن متعة من ذلك، ولكن أنا الوقوع في معضلة في محاولة لمعرفة نظام المعدات.

ولدي جدول العناصر التي تحتوي على كافة المعلومات الممكنة حول عنصر، بما في ذلك حقل 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 

والمشكلة الوحيدة مع استخدام مثل هذا النظام هي أن للكيك لا يدعم متعددة المفاتيح الخارجية لنموذج.

هل لديها أي أفكار عن كيفية تنفيذ مثل هذا النظام؟

تحرير يتم استخدام جدول HABTM القائمة من items_users لتخزين العناصر التي يملك المستخدم حاليا. في كل مرة المستخدم يكتسب عنصر جديد، انها الهوية ويتم تخزين معرف المستخدم في الجدول items_users. أنا مجرد محاولة لمعرفة كيفية تطبيق نظام المعدات.

وبواسطة لا يدعم متعددة المفاتيح الخارجية، أعني للكيك لا يدعم أصلا متعددة المفاتيح الخارجية من جدول واحد في جدول آخر. بلدي على سبيل المثال يزود الجدول يحتوي على 8 مفاتيح خارجية، كل لافتا إلى وITEM_ID.

وانظر: https://trac.cakephp.org/ticket/1923

هل كانت مفيدة؟

المحلول

ولقد وجدت أن العلاقات HABTM هي الأفضل بالنسبة للعلاقات بسيطة، وليس المعقدة وكأنك تصف أعلاه. فكرة وجود علاقة HABTM هو جعل الانضمام الجدول غير مرئية تقريبا لذلك لم يكن لديك للحفاظ على مفاتيح خارجية إضافية. أنه يعمل بشكل جيد للحالات البسيطة.

في قضيتك، لديك جدول يجهز التي ستنضم إلى كافة جوانب أخرى من النظام الخاص بك. في التصميم، وكنت في حاجة الى نقطة البداية. أتصور "المستخدم" سيكون هذا المنطلق، وسوف يكون لدى المستخدم العديد من يجهز. قد تحد من مستخدم إلى وجود سوى تجهيز واحدة، مما سيعطي تقريبا نفسها لدمج المستخدم ويجهز الجداول في مؤسسة واحدة.

في أي حال كنت بحاجة للبدء من خلال تحديد القواعد.

والعضو -> HasOne -> يجهز يجهز -> BelongsTo -> المستخدم

ووفقا لديسني قاعدة البيانات الخاصة بك، فإنه يبدو وكأنه ستبذل العلاقات التالية. يجهز -> BelongsTo -> هات يجهز -> BelongsTo -> بانت يجهز -> BelongsTo -> الويب التي تواجهها الارشاد -> HasMany -> يجهز ...

لبناء أفضل تطبيق، ما أود أن أقترح هو بناء كل علاقة ممكنة وإلقاء نظرة على مجموعة البيانات الناتجة عن كل عرض ...

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

ومن هناك وأود أن إعادة تصميم الجداول للحصول على هيكل التي تبدو جيدة والمنطقي. ثم تقليم العلاقات غير الضرورية.

وأيضا قضاء بعض الوقت في النظر في ملزمة ونماذج غير ملزمة. هذا سيسمح لك لتخصيص البيانات والعلاقات على نحو أكثر فعالية مرة واحدة تصميم قاعدة البيانات مستقرة.

وآمل أن يساعد هذا قليلا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top