Anruf mit Attributname aufrufen - $ product-> load ('matronm_name');
-
16-10-2019 - |
Frage
Wenn ich eines der Projekte, an denen ich gearbeitet habe $product->load('attribute_name')
, wo das Produkt eine Instanz von ist Mage_Catalog_Model_Product
. Durch den Code für ein Produktmodell werde ich nicht feststellen, was dies tun soll. Ist dies nur ein Missverständnis von dem, wer diesen benutzerdefinierten Code geschrieben hat, oder fehlt mir etwas?
Für mich würde dies versuchen, ein Produkt mit der ID von 'Attribute_Code' zu laden, was nicht existiert. In dieser Situation würde es treffen Mage_Eav_Model_Entity_Abstract::load
mit $product, 'attribute_code', array()
als Argumente. Dies würde das aktuelle Modell tatsächlich als neu markieren mit isObjectNew(true)
Da es nicht aus der Datenbank geladen werden kann, aber seitdem $attributes
ist leer, es wird auslösen Mage_Eav_Model_Entity_Abstract::loadAllAttributes
, was aufgrund der Tatsache, dass das Modell teilweise geladen wurde und somit bereits eine Entity_ID enthält, alle Attribute aus der Datenbank dafür abgerufen entity_id
. Wenn dies der Fall ist, ist die Zeichenfolge 'attribute_code'
ist etwas irrelevant (solange es nicht die Entity_id eines anderen Produkts ist) und alle Attribute werden für das im Modell enthaltene Entity_ID geladen.
Ist mein Verständnis richtig oder fehlt mir etwas?
Lösung
Kurz gesagt, ja, was Sie vorschlagen, ist korrekt. Die Auswählungsanweisung, die beim Aufrufen der Last in Ihrer Frage erstellt wurde, lautet wie folgt.
SELECT `catalog_product_entity`.* FROM `catalog_product_entity` WHERE (entity_id ='attribute_name')
Sie können dies herausfinden, indem Sie die Lastmethode in der Lastmethode eingeben Mage_Eav_Model_Entity_Abstract
Wenn Sie tatsächlich ein Produkt über ein Attribut laden möchten, das nicht ist entity_id
Der folgende Ausschnitt würde es tun.
Mage::getModel('catalog/product')->loadByAttribute('sku', 'My Sku Value');
Hinweis: mit loadByAttribute
Wenn das Attribut nicht eindeutig ist, wird das erste gefundene Objekt zurückgegeben
Zweiter Anmerkung: Dies gibt entweder eine zurück object
oder false
(Danke Fabian)
Andere Tipps
Zusätzlich zu David Manners ...
Wenn Sie tatsächlich ein Produkt über ein Attribut laden möchten, das nicht ist
entity_id
Der folgende Ausschnitt würde es tun.Mage::getModel('catalog/product')->loadByAttribute('sku', 'My Sku Value');
Um das Laden zu beschleunigen, sollten Sie sich darum kümmern loadByAttribute
3. Parameter.
/**
* Load entity by attribute
*
* @param Mage_Eav_Model_Entity_Attribute_Interface|integer|string|array $attribute
* @param null|string|array $value
* @param string $additionalAttributes
* @return bool|Mage_Catalog_Model_Abstract
*/
public function loadByAttribute($attribute, $value, $additionalAttributes = '*')
{
$collection = $this->getResourceCollection()
->addAttributeToSelect($additionalAttributes)
->addAttributeToFilter($attribute, $value)
->setPage(1,1);
foreach ($collection as $object) {
return $object;
}
return false;
}
Satz $additionalAttributes
zu null
(nur Standardattribute) oder array('your', 'attributes', 'here')
für Ihre eigene.
$attributesToSelect = array('name');
Mage::getModel('catalog/product')->loadByAttribute('sku', 'My Sku Value', $attributesToSelect);