Ich arbeite mit Laravel Eloquent-Modellen und habe bei einem Erbschaftsproblem festgefahren.PHP Laravel Eltern erben dynamische statische Parameter von Kindern
Ich habe BaseModel
Klasse, die protected static $dynamicRelations = [];
Parameter hat, und einige Methoden, um damit zu arbeiten.
Und dann habe ich mehrere andere Klassen, erstreckt BaseModel
, in diesem Beispiel die PageModel
und EventModel
sagen lassen.
Wenn ich eine dynamische Beziehung auf der Seite Modell zu erstellen, die als solche PageModel::setDynamicRelation
, es setzt sie in der statischen Variablen:
public static function setDynamicRelation($key, $callback)
{
static::$dynamicRelations[$key] = $callback;
}
Auf diese Weise habe ich eine dynamische Beziehung zum Modell hinzugefügt werden können. Wenn ich also PageModel::setDynamicRelation('banners', ...)
mache, dann kann ich auf einer Instanz von PageModel
PageModel->banners
aufrufen, um die Beziehungswerte abzurufen.
Das Problem ist, dass die Beziehungen im statischen Parameter BaseModel
gehalten werden und von anderen Modellen vererbt werden. Also, wenn ich die relationsip auf PageModel
setzen und dann eine EventModel
instanziieren, erhält es auch die gleichen Beziehungen, die nicht korrekt ist.
Wie kann ich es so machen, dass die Beziehungen in der Kindklasse gespeichert werden und nicht von anderen Klassen vererbt werden? I.e. müssen Sie eine Kopie von $dynamicRelations
in der Klasse speichern, für die die Methoden aufgerufen werden, sodass nicht alle untergeordneten Elemente die gleichen Beziehungen haben?
Danke!
, wenn Sie wollen etwas, das dynamische warum nicht morphen benutzen? – jycr753
@ jycr753 könntest du bitte weiterlesen? Ich habe eine Struktur, in der ich Modulen erlauben muss, andere Module zu ändern, so dass ein Modul namens "PageBanners" eine dynamische Beziehung zum 'Page'-Modell hinzufügen kann, ohne den Code im' Page'-Modell zu ändern. – Giedrius
Das sollte nicht passieren. In Ihrem Beispiel sollte 'EventModel' nicht die Beziehungen des' PageModel' erhalten, sie sind zwei verschiedene Instanzen. – user3158900