Ich bin etwas verwirrt über die Verwendung von Ressourcenmodellen und Sammlungsmodellen. Manchmal, wenn ich Beispiele zum Laden von Produkten mit bestimmten Attributen sehe, verwenden sie in einigen Beispielen das Sammlungsmodell und manchmal das Ressourcenmodell.
Auch wenn kann ich bestimmte Methode get...
und set...
zusammen mit Tabellenzeile Namen? Wie getName
, getId
. Ich habe versucht, die Werte zu verwenden, konnte sie jedoch nicht abrufen. Es wird der Fehler "Aufrufen einer undefinierten Methode im Objekt" angezeigt.
$product = Mage::getModel('catalog/product')
->loadByAttribute('name', 'product_name');
echo $product->getName();
echo $product->getSku();
Es zeigt "undefinierte Methode getSku()
"
Wenn ich benutze var_dump($product)
, wird die SKU im Objekt angezeigt, die SKU kann jedoch nicht mit getSku()
... abgerufen werden .
magento-1.7
collection
product-list
resource-model
MagentoBoy
quelle
quelle
$product
In Ihrem Beispiel ist dies eine Instanz vonMage_Catalog_Model_Product
, die im Magento-Sprachgebrauch ein "Modell" darstellt.Antworten:
Die CRUD-Modelle von Magento verfügen über drei grundlegende Klassentypen.
Ein "Modell" wird am häufigsten verwendet. Dies stellt Daten eines bestimmten Typs datenbankunabhängig dar (Produkt, Kategorie, CMS-Seite, Überprüfung usw.).
Ein "Ressourcenmodell" ist eine Klasse, die hinter den Kulissen das eigentliche Abrufen von Daten aus Magento ausführt. Jedes Modell verfügt über ein Ressourcenmodell , mit dem eine einzelne Instanz eines Modells aus der Datenbank geladen wird .
Eine "Sammlung" ist eine Klasse, die eine Array-ähnliche Struktur mehrerer Modelle basierend auf einer Reihe von Regeln lädt. Stellen Sie es sich wie eine SQL vor
WHERE clause
.Dinge etwas verwirrend ist, hinter den Kulissen, Magento auch eine Sammlung der Ansicht , ein Ressourcenmodell sein. Es gibt also Sammlungsressourcenmodelle und einzelne Ressourcenmodelle .
Wenn Sie einen bestimmten Artikel laden möchten, verwenden Sie im Allgemeinen ein Modell . Wenn Sie mehrere Elemente laden möchten, verwenden Sie ein Sammlungsressourcenmodell .
Beachten Sie beim Laden über ein Sammlungsressourcenmodell, dass die
afterLoad
Methode jedes einzelnen Modells nicht automatisch aufgerufen wird. Dies bedeutet, dass einige Daten möglicherweise nicht geladen werden.Auf die einzelnen Ressourcenmodellklassen wird normalerweise nicht direkt zugegriffen. Gelegentlich verfügt ein bestimmtes Modell jedoch über ein Ressourcenmodell mit einer nützlichen Methode. Diese werden Sie im Laufe der Zeit mithilfe des Systems feststellen.
Schließlich ist noch eine Unterscheidung zu treffen. Magentos reguläre CRUD-Modelle haben eine spezielle Syntax zum Laden über etwas, das nicht die numerische ID ist. Beispiel: So laden Sie ein CMS-Seitenmodell nach Titel
Einige Magento-Modelle sind jedoch EAV-Modelle. Dies steht für "Entitätsattributwert" und ist eine originelle Art zu sagen, dass diese Modelle keine feste Menge von Feldern haben. Dies umfasst Produktmodelle und Kategoriemodelle. Mit dieser Funktion können Sie verschiedene Attribute für verschiedene Produkttypen auswählen. Jedes Feld in einem EAV-Modell wird als Attribut bezeichnet. Die obige Syntax funktioniert bei diesen Modellen nicht, stattdessen müssen Sie die
loadByAttribute
Methode verwenden.Wenn Sie in Bezug auf Ihr spezifisches Problem eine Fehlermeldung mit dem spezifischen Text "Methode undefiniert" erhalten, stimmt etwas mit Ihrem System nicht. Auch wenn die
getSku
Methode nicht vorhanden ist, verfügt Magento über Methoden zum Setzen und Abrufen von Zaubersprüchen, mit denen sichergestellt wird, dass einget
Aufruf eines Modells immer etwas zurückgibt, auch wenn es null ist.Wahrscheinlicher ist, dass Sie einen Fehler wie den folgenden erhalten
Dieser Fehler tritt auf, weil die
loadByAttribute
Methode zurückgibt,false
wenn das Objekt nicht geladen werden kann.Versuchen Sie so etwas in Ihrem Code.
Beachten Sie zusätzlich zur Bedingung die
getData()
Methode. Dadurch wird ein Array aller Objektdaten als Array zurückgegeben.Hoffentlich ist das genug, um dich in Bewegung zu bringen. Viel Glück!
quelle