Ich habe ziemlich viel Erfahrung mit Magento, aber mir wurde klar, dass ich nicht verstehe, welche Art des Ladens eines Modells die richtige ist und warum. Ich habe alles über das Thema gelesen, was ich konnte, aber Leute, die solche Dinge erklären, gehen nie tief genug, um zu erklären, warum sie diese spezielle Methode anstelle einer anderen verwenden. Nehmen wir an, es gibt kein Repository für das Modell, das ich laden möchte.
Bis jetzt habe ich immer model im Konstruktor verwendet und es dann einfach geladen.
public function __construct(
\Vendor\Module\Model\Something $somethingModel
) {
$this->somethingModel = $somethingModel;
}
public function getTestById($id) {
return $this->somethingModel->load($id);
}
Und es hat immer wie beabsichtigt funktioniert, ich bin mir auch ziemlich sicher, dass es im Kern allgemein verwendet wird oder zumindest verwendet wurde.
Aber dann sah ich einen meiner Kollegen mit
modelFactory->create()->load($id)
Soweit ich weiß, werden Fabriken zum Erstellen einer neuen Entität verwendet. Wenn ich beispielsweise ein neues Produkt erstellen möchte, kann ich die Fabrik erstellen, mit Daten füllen und dann speichern. Andererseits habe ich angefangen, das Thema zu untersuchen, und ich habe ein Beispiel von Fabian Schmengler ( Wann sollten wir ein Repository und eine Factory in Magento 2 verwenden? ) Gesehen, der das Modell auf diese Weise geladen hat und auch andere davon abgehalten hat, die Modelle einfach zu laden. Ich erkläre nicht, warum, abgesehen davon, dass es nicht Teil des Servicevertrags ist. Soweit ich weiß, sind Repositorys Teil von Serviceverträgen, daher sehe ich hier keinen Zusammenhang, wenn es darum geht, Modelle zu laden, die nicht über ein Repository verfügbar sind.
Um noch mehr Verwirrung zu stiften, habe ich auch eine Möglichkeit gefunden, das Modell zu laden, indem ich das resourceModel von der erstellten modelFactory abgerufen habe. Es wurde von Vinai Kopp vorgestellt ( Wie implementiere ich einen Servicevertrag für ein benutzerdefiniertes Modul in Magento 2? ) Und jetzt bin ich es völlig verloren, da ich immer gelesen habe, dass ich Ressourcenmodelle nicht direkt verwenden sollte.
Könnte mir jemand sagen, welcher Weg der richtige ist und warum ich ihn anstelle aller anderen Methoden verwenden sollte?