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 .
//loads one
$product = Mage::getModel('catalog/product')->load($id);
//loads many products where price is greater than 100
$products = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('*') //load all fields, see EAV below
->addAttributeToFilter('price', array('gt'=>'100'));
foreach($products as $product)
{
var_dump($product->getSku());
}
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
$page = Mage::getModel('cms/page')->load('Home page','title');
var_dump($page->getData());
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.
$product = Mage::getModel('catalog/product')->loadByAttribute('sku', 'n2610');
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 ein get
Aufruf eines Modells immer etwas zurückgibt, auch wenn es null ist.
Wahrscheinlicher ist, dass Sie einen Fehler wie den folgenden erhalten
Call to a member function getSku() on a non-object
Dieser Fehler tritt auf, weil die loadByAttribute
Methode zurückgibt, false
wenn das Objekt nicht geladen werden kann.
$product = Mage::getModel('catalog/product')->loadByAttribute('sku', 'this-is-not-a-sku');
var_dump($product); //prints false
Versuchen Sie so etwas in Ihrem Code.
$product = Mage::getModel('catalog/product')->loadByAttribute('sku', 'sku-value');
if($product)
{
var_dump($product->getName());
var_dump($product->getSku());
var_dump($product->getData());
}
else
{
var_dump("Could not load product");
}
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!
$product
In Ihrem Beispiel ist dies eine Instanz vonMage_Catalog_Model_Product
, die im Magento-Sprachgebrauch ein "Modell" darstellt.