Wie erhalte ich einen bestimmten Produktattributwert, wenn ich die Produkt-ID kenne, ohne das gesamte Produkt zu laden?
magento
attributes
product
Denis Óbukhov
quelle
quelle
Antworten:
quelle
Ein Weg, den ich kenne:
quelle
$product
zweimal verwenden?Sie können verwenden
quelle
$product->getData('my_name')
Bitte lesen Sie die Antwort von Daniel Kocherga , da diese in den meisten Fällen für Sie funktioniert.
Zusätzlich zu dieser Methode, um den Wert des Attributs abzurufen, möchten Sie manchmal die Bezeichnung eines
select
oder erhaltenmultiselect
. In diesem Fall habe ich diese Methode erstellt, die ich in einer Hilfsklasse speichere:quelle
Es scheint unmöglich, Wert zu erhalten, ohne das Produktmodell zu laden. Wenn Sie sich die Datei app / code / core / Mage / Eav / Model / Entity / Attribute / Frontend / Abstract.php ansehen, sehen Sie die Methode
Wie Sie sehen können, erfordert diese Methode ein geladenes Objekt, um Daten von ihm abzurufen (3. Zeile).
quelle
Zuerst müssen wir sicherstellen, dass das gewünschte Attribut geladen wird, und es dann ausgeben. Benutze das:
quelle
Versuche dies
quelle
Sie müssen nicht das gesamte Produkt laden. Magentos-Kollektionen sind sehr leistungsfähig und intelligent.
In dem Moment, in dem Sie getFirstItem () aufrufen, wird die Abfrage ausgeführt und das Ergebnisprodukt ist sehr minimal:
quelle
Dieser funktioniert-
quelle
Sie können den Attributwert folgendermaßen abrufen
quelle
Alle Dinge, die Sie verwenden, um die Bestellung eines benutzerdefinierten Optionswagens in Magento 2 abzurufen: https://www.mageplaza.com/how-get-value-product-custom-option-cart-order-magento-2.html
quelle
Sie könnten eine Methode schreiben, die dies direkt über SQL tun würde, nehme ich an.
Würde ungefähr so aussehen:
Variablen:
Abfrage:
Sie müssten den Wert aus der richtigen Tabelle basierend auf dem Backend-Typ des Attributs (Feld in eav_attribute) abrufen, sodass mindestens eine zusätzliche Abfrage erforderlich ist.
quelle
Wenn Sie ein text / textarea-Attribut mit dem Namen my_attr haben, können Sie es erhalten durch:
product->getMyAttr();
quelle