ich einen Bericht bin Modellierung, die von seinem Typ abhängig (Person fehlt, wollte, usw.) könnten verschiedene Felder enthalten, aber jede Art teilt sich eine Anzahl von Feldern. Dies ist, denke ich, was unterscheidet diese Frage von sagen: this question, wo die Felder über alle Arten hinweg sind.Laravel Eloquent polymorphe Beziehungen modellieren Hierarchie/Vererbung
Im Moment habe ich seine Art ein Berichtsmodell mit einem ganzzahligen Feld angelegt habe angibt, die eine Art Tabelle verweist. Der Vorteil ist, dass dies ein einfaches Modell zu verstehen und zu implementieren ist. Es bedeutet, dass ich auch leicht nach Objekten suchen kann. Auf der anderen Seite bedeutet dies, dass einige Felder für einige Modelle nicht sinnvoll sind und daher immer Null sind. Wenn ich Felder für die einzelnen Typen hinzufüge, habe ich viele Spalten in der Tabelle, von denen viele null sind.
würde ich eine Beratung auf Laravel der (5.2) polymorphe Beziehungen verwenden. Die Art, wie ich mir das vorstelle, ist, dass ich ein Basisreportmodell haben werde, das alle geteilten Felder enthält und die MorphTo Felder hat; Dann trennen Sie die verschiedenen Typen mit ihren eindeutigen Feldern in einer Eins-zu-Eins-Beziehung mit dem Berichtsmodell. Ist das möglich und macht das überhaupt Sinn? Die Probleme, die ich sehe, sind, dass ich die Fähigkeit verliere, über alle "Berichte" unabhängig vom Typ zu suchen. Oder gibt es einen Weg darum, sagen wir Java, wo die Vererbung es zulässt, dass Unterklassen als Mitglieder der Oberklasse betrachtet werden?
Eine grobe Schema solcher Beziehungen ist unten dargestellt. Reports enthält die freigegebenen Felder, während Wanted und Missing eindeutige Felder haben.
Dank @Donkamash. Dies ist sehr sinnvoll und sehr prägnant. Wie auch immer, jeder wanted_report und missing_report bezieht sich nur auf einen Bericht, also bin ich mir nicht sicher, ob das richtig ist?'public function missing_reports() { Rückgabe $ this-> hasMany (MissingReport :: class); } 'Ich habe auch immer noch Schwierigkeiten herauszufinden, warum nicht eine polymorphe Beziehung. Soweit ich sagen kann polymorph beseitigt die Notwendigkeit, den Fremdschlüssel explizit zu pflegen. Ich wickle immer noch meinen Kopf um diese Konzepte, also ertragen Sie mit mir –
Wenn es eine Eins-zu-Eins-Beziehung ist, dann können Sie Ihre Beziehung entsprechend definieren 'public function missing_reports() {return $ this-> hasOne (MissingReport :: class); } '. Ihr Fall erfordert keine polymorphe Relation und denken Sie auch daran, dass eine polymorphe Relation eine zusätzliche Tabellensuche während der Abfrage erfordert (Leistungseinfluss). Verwenden Sie sie also nicht, wenn sie nicht benötigt wird - ich würde vorschlagen. Aber wieder kommt es auf Ihre Präferenz an. – Donkarnash
Danke. Lass mich das umsetzen. Ich neige dazu, Ihre Antwort zu akzeptieren, aber lassen Sie mich zuerst bestätigen, dass es in der Praxis so funktioniert, wie ich es möchte. –