Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Benötigen Sie Hilfe beim Verständnis der Magento-Produktsammlungsobjekte und des Katalog-/Produktmodells

Sie haben mehrere Möglichkeiten, auf Daten von Magento zuzugreifen:

  • using load() => lädt ALLE Daten (Attribute) relativ zu einem Modell. Es ist sehr langsam und Performance-Killer. Für ein Produkt sollten Sie ein load() nur auf der Produktseite verwenden (da alle Daten, die Sie auf dieser Seite verwenden, relativ zu einem einzelnen Objekt sind, sodass Sie es vollständig laden können)

  • using collection => Wenn Sie eine Liste von Objekten abrufen müssen, müssen Sie (mindestens) eine Sammlung verwenden. Es liegt an Ihnen, zu entscheiden, welche Attributliste Sie abrufen möchten. Sie können Attribute zum Auswählen/Filtern hinzufügen und die Sammlung wird die SQL-Joins zu EAV-Tabellen usw. im Hintergrund verwalten

  • Die Verwendung von benutzerdefiniertem SQL => Sammlung kann langsam sein, wenn es um komplexe Objekte geht (eine Sammlung initialisiert viele SQL-Joins zu Tabellen, die Sie möglicherweise nicht benötigen). Die letzte Methode, um auf Daten von BDD zuzugreifen, besteht darin, Ihr eigenes SQL in Ihrem Ressourcenmodell zu erstellen. P>

In dem von Ihnen gezeigten Skript gibt es einen großen Fehler:Sie laden ein vollständiges Modell in ein foreach, das eine Sammlung durchläuft. Sie dürfen das niemals tun, wenn Sie das Produkt laden () müssen, nehme ich an, weil Sie kein Attribut in der Sammlung gefunden haben? In diesem Fall müssen Sie nur die Sammlung ändern, um das Attribut abzurufen...

Für ein Produkt bietet Magento beispielsweise eine Möglichkeit, automatisch Attribute zu jeder Produkt->Sammlung hinzuzufügen (oder zu entfernen), die Sie instanziieren. (siehe XML-Tag frontend/product/collection/attributes in der config.xml von Mage_Catalog)