Frage

Ich versuche auch ein CakePHP basiertes Web-Spiel vor allem für die Praxis zu schaffen, wie zum Spaß, aber in ein Rätsel leite versucht, ein Gerätesystem zu verstehen.

Ich habe eine Artikel Tabelle, die alle möglichen Informationen über ein Element enthält, darunter ein item_type Feld, das ein Integer-Wert enthält die Bestimmung, was der Elementtyp ist, und führt, die Informationen über das Produkt zu verwenden.

d. item_type = ‚1‘ bedeutet, dass das Element ein Hut ist, zu verwenden, was bedeutet, dass nur Leistung, Preis, Boni und Anforderungen notwendige Informationen sind. Das alles funktioniert gut.

Ich habe auch einen items_users HABTM Tisch gesetzt, um bis zu speichern alle derzeit im Besitz Gegenstände, die jeder Spieler hat, ist dies auch gut funktioniert.

Was ich versuche, herauszufinden, wie ein Ausrüstungssystem funktionieren würde. Ich dachte zuerst über eine Tabelle ausstattet wie:

    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 

Das einzige Problem mit einem System wie dies ist, dass CakePHP nicht mehr Fremdschlüssel für ein Modell nicht unterstützt.

Hat jemand irgendwelche Ideen, wie ein solches System zu implementieren?

EDIT Die bestehende HABTM Tabelle items_users wird zum Speichern verwendet, welche Elemente ein Benutzer zur Zeit besitzt. Jedes Mal, wenn ein Benutzer erwirbt ein neues Element, es ist id und die ID des Benutzers wird in der items_users Tabelle gespeichert. Ich bin nur zu versuchen, herauszufinden, wie ein Gerätesystem zu implementieren.

Mit dem nicht mehrere Fremdschlüssel unterstützt, ich meine CakePHP nicht nativ mehrere Fremdschlüssel aus einer Tabelle in einer anderen Tabelle unterstützen. Mein Beispiel stattet Tabelle 8 Fremdschlüssel, die sich alle auf item_id des verweist.

siehe: https://trac.cakephp.org/ticket/1923

War es hilfreich?

Lösung

Ich habe festgestellt, dass HABTM Beziehungen sind am besten für einfache Beziehungen, nicht komplexe wie Sie beschreiben oben. Die Idee einer HABTM Beziehung ist die Join-Tabelle fast unsichtbar zu machen, so dass Sie die zusätzlichen Fremdschlüssel nicht halten müssen. Es funktioniert gut für einfache Fälle.

In Ihrem Fall haben Sie die ausrüstet Tabelle, die alle anderen Aspekte des Systems anschließen würde. Bei der Konstruktion, benötigen Sie einen Ausgangspunkt. Ich könnte mir vorstellen, die „user“ würde diesen Ausgangspunkt sein und der Benutzer würde viele ausrüstet haben. Sie dürfen nur ein Ausrüsten auf mit einem Benutzer begrenzen, die sich fast verleihen würde den Benutzer zu verschmelzen und rüstet Tabellen zu einem einzigen.

In jedem Fall müssen Sie durch die Definition der Regeln beginnen.

Benutzer -> hasOne -> Rüstet Rüstet -> Gehört -> Benutzer

Nach Ihrer Datenbank deisgn, es sieht aus wie die folgenden Beziehungen hergestellt werden würden. Rüstet -> Gehört -> Hat Rüstet -> Gehört -> Pant Rüstet -> Gehört -> Wep Wep -> HasMany -> Rüstet ...

die beste Anwendung zu erstellen, was würde ich vorschlagen, ist jede mögliche Beziehung aufzubauen und Blick auf die resultierende Datensatz aus jeder Ansicht ...

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

Von dort würde ich die Tabellen neu zu gestalten, eine Struktur zu erhalten, das gut aussieht und macht Sinn. Dann die unnötigen Beziehungen trimmen.

verbringen auch einige Zeit mit der Suche in verbindliche und unverbindliche Modelle. Dies ermöglicht es Ihnen, effektiver, um die Daten und Beziehungen anpassen, sobald die Datenbank-Design stabil ist.

Hope, das hilft ein wenig.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top