ColinM cevabı işleri nedeni kodda olduğu app/code/core/Mage/Catalog/Model/Resource/Product/Collection.php
'nin addAttributeToFilter
yöntemiyle. Bu dizi biçimini kullanırsanız, çağırmaz addAttributeToSelect
. Düz modda, addAttributeToSelect
öznitelik düz tabloda değilse sessizce başarısız olur.
(aşağıda benim cevabın bir yeniden karma /programming/6271284/can-i-add-other-attributes-to-magentos-flat-product-catalog-table/17021620 - Ben Görgü kurallarının ne olduğundan emin değilim ama bunu yararlı bulacağımı biliyorum)
Ben düz olmayan öznitelikleri seçme ve filtreleme düz mod toplama için "temiz" bir çözüm istedim, hangi:
- özelliğin admin'de belirli ayarlara sahip olmasını gerektirmez (bir kullanıcı tarafından eklenebilir veya kullanıcı arabiriminde gizli olabilir)
- hem düz hem de düz olmayan mod için çalışır
İlişkili ürün koleksiyonunu kullandım, ancak bu tüm EAV koleksiyonları için geçerlidir.
Hata kodu:
$_product = Mage::getModel('catalog/product')->loadByAttribute( 'sku', 'ABC123' );
$coll = $_product->getTypeInstance()->getAssociatedProductCollection()
->addAttributeToSelect( 'my_custom_attribute' )
->addAttributeToFilter( 'my_custom_attribute', 3 )
;
Düz modda, yukarıdaki kod, düz tabloda yer almıyorsa, niteliği sessizce seçemez veya filtreleyemez.
Seçime ekleniyor:
$_product = Mage::getModel('catalog/product')->loadByAttribute( 'sku', 'ABC123' );
$coll = $_product->getTypeInstance()->getAssociatedProductCollection()
->joinAttribute( 'my_custom_attribute', 'catalog_product/my_custom_attribute', 'entity_id', null, 'left' )
->addAttributeToSelect( 'my_custom_attribute' )
;
joinAttribute
Yöntem istenen özellik için sorguya katılmak ekler. Özellik zaten düz tablodayken hala çalışır, ancak yalnızca düz tabloyu kullanmaktan biraz daha az verimli olacaktır.
Bu ürünlerde ayarlanmamışsa left
ürünleri getirmesini sağlamak için orada bir birleşim kullandım my_custom_attribute
. inner
Yalnızca my_custom_attribute
ayarlanan satırlarla ilgileniyorsanız bunu değiştirin .
Filtreye ekleme (yukarıdaki ColinM uyarınca):
$_product = Mage::getModel('catalog/product')->loadByAttribute( 'sku', 'ABC123' );
$coll = $_product->getTypeInstance()->getAssociatedProductCollection()
->addAttributeToFilter( array( array( 'attribute' => 'my_custom_attribute', 'eq' => 3 ) ) )
;
Yukarıdaki kod, filtreyi seçmenin yanı sıra seçime ekleyecektir.
(CE 1.6.2.0'da test edilmiştir)
non-flat attribute
? Teşekkür It zaten kafa karıştırıcı karmakarışık do not make magento .ve