(Entschuldigung für meine inkohärente Frage: Ich habe versucht, einige Fragen zu beantworten, als ich diesen Beitrag schrieb, aber hier ist es :)
Ich versuche, ein Datenbankmodell mit einer Viele-zu-Viele-Beziehung innerhalb einer Verknüpfungstabelle zu erstellen, das jedoch auch einen Wert pro Verknüpfung aufweist, in diesem Fall eine Lagertabelle. (Dies ist ein grundlegendes Beispiel für weitere Probleme, die ich habe, aber ich dachte, ich würde es nur damit testen, bevor ich fortfahre).
Ich habe exportmwb verwendet , um die beiden Entities Store und Product für dieses einfache Beispiel zu generieren. Beide werden unten angezeigt.
Das Problem ist jetzt jedoch, dass ich nicht herausfinden kann, wie ich mit Doctrine auf den stock.amount-Wert (signiert int, da er negativ sein kann) zugreifen kann. Auch wenn ich versuche, die Tabellen mit der Funktion orm: schema-tool: create der Doktrin zu erstellen
Dies ergab nur zwei Entitäten und drei Tabellen, eine als Verknüpfungstabelle ohne Werte und zwei Datentabellen, da viele-zu-viele-Beziehungen selbst keine Entitäten sind, sodass ich nur Produkt und Speicher als Entität haben kann.
Daher habe ich logischerweise versucht, mein Datenbankmodell so zu ändern, dass der Bestand als separate Tabelle mit Beziehungen zu Speicher und Produkt vorhanden ist. Ich habe auch die Feldnamen umgeschrieben, um dies als Ursache des Problems ausschließen zu können:
Dann stellte ich fest, dass ich immer noch keine Aktienentität bekam ... und die Datenbank selbst kein 'Betrag'-Feld hatte.
Ich musste wirklich in der Lage sein, diese Geschäfte und Produkte (unter anderem) in einer Lagertabelle zusammenzubinden. Es ist also keine Option, nur den Lagerbestand des Produkts selbst hinzuzufügen.
root@hdev:/var/www/test/library# php doctrine.php orm:info
Found 2 mapped entities:
[OK] Entity\Product
[OK] Entity\Store
Und wenn ich die Datenbank erstelle, werden mir immer noch nicht die richtigen Felder in der Bestandsliste angezeigt:
Als ich hier einige Dinge nachschlug, stellte ich fest, dass viele-zu-viele-Verbindungen keine Entitäten sind und daher keine Werte haben können. Also habe ich versucht, es in eine separate Tabelle mit Beziehungen zu den anderen zu ändern, aber es hat immer noch nicht funktioniert.
Was mache ich hier falsch?
quelle
Antworten:
Eine Viele-zu-Viele-Zuordnung mit zusätzlichen Werten ist keine Viele-zu-Viele-Zuordnung, sondern eine neue Entität, da sie jetzt eine Kennung (die beiden Beziehungen zu den verbundenen Entitäten) und Werte aufweist.
Das ist auch der Grund , warum viele-zu-Viele Verbände sind so selten: Sie neigen dazu , in ihnen zusätzliche Eigenschaften zu speichern, wie
sorting
,amount
etc.Was Sie wahrscheinlich brauchen, ist etwa Folgendes (ich habe beide Beziehungen bidirektional gemacht, erwägen Sie, mindestens eine davon unidirektional zu machen):
Produkt:
Geschäft:
Lager:
quelle
Die Lehre geht gut mit vielen-zu-vielen-Beziehungen um.
Das Problem, das Sie haben, ist, dass Sie keine einfache ManyToMany-Zuordnung benötigen, da Zuordnungen keine "zusätzlichen" Daten enthalten können.
Ihre mittlere (Lager-) Tabelle benötigt eine eigene Entität, um diese zusätzlichen Daten zu modellieren, da sie mehr als product_id und store_id enthält.
Sie möchten also wirklich drei Entitätsklassen:
und zwei Verbände:
quelle
php app/console doctrine:mapping:import AppBundle yml
ausführe, um das Schema aus der Datenbank zu importieren. Ich möchte, dass diese zusätzliche Mapping-Yaml-Datei generiert wird. Hat jemand eine Idee?:(