Saya melakukan hal berikut:
$productCollection = Mage::getModel('catalog/product')
->getCollection();
$productCollection
->addAttributeToFilter('my_attribute', 1);
my_attribute
tidak ada dalam tabel datar, tetapi tabel datar diaktifkan.
Saya terus mendapatkan koleksi lengkapnya.
Alasannya tampaknya ada di \Mage_Catalog_Model_Resource_Product_Collection::addAttributeToSelect
:
$columns = $this->getEntity()->getAttributeForSelect($attributeCode);
Tidak $this->getEntity()
adalah contoh Mage_Catalog_Model_Resource_Product_Flat
yang mengambil bidang datar - dan jika tidak ada yang ditemukan, hanya mengembalikan nol.
Apa cara bersih untuk menambahkan atribut non-flat ke filter koleksi?
Dalam kasus saya itu tidak masuk akal, untuk menambahkan atribut ke tabel datar.
ce-1.7.0.2
collection
Alex
sumber
sumber
non-flat attribute
? Terima kasih. Dan jangan membuat magento membingungkan. Ini sudah membingungkanJawaban:
Anda bisa bergabung dengan tabel yang diperlukan sendiri.
Anda mungkin ingin bergabung dengan store_id juga.
sumber
Retasan (CE 1.6.2.0+) adalah untuk lulus kondisi sebagai array dan percaya atau tidak ini berfungsi sebagaimana dimaksud:
sumber
addFieldToFiler
adalah pembungkus untukaddAttributeToFilter
dan ini memiliki opsi untuk melewatkan atribut sebagai array:if (is_array($attribute)) { $sqlArr = array(); foreach ($attribute as $condition) { $sqlArr[] = $this->_getAttributeConditionSql($condition['attribute'], $condition, $joinType); } $conditionSql = '('.implode(') OR (', $sqlArr).')'; }
Alasan jawaban ColinM ini bekerja adalah karena kode di
app/code/core/Mage/Catalog/Model/Resource/Product/Collection.php
'saddAttributeToFilter
metode. Jika Anda menggunakan format array ini, itu tidak memanggiladdAttributeToSelect
. Dalam mode flat,addAttributeToSelect
gagal secara diam-diam jika atribut tidak ada di tabel rata.(di bawah ini adalah hash dari jawaban saya di /programming/6271284/can-i-add-other-attributes-to-magentos-flat-product-catalog-table/17021620 - Saya tidak yakin apa etiket untuk itu tetapi tahu saya akan merasa terbantu)
Saya menginginkan solusi "bersih" untuk memilih dan memfilter koleksi mode-datar pada atribut non-datar, yang:
Saya menggunakan koleksi produk terkait, tetapi ini berlaku untuk setiap koleksi EAV.
Kode gagal:
Dalam mode flat, kode di atas diam-diam gagal memilih atau memfilter atribut jika kebetulan tidak ada dalam tabel datar.
Menambahkan ke pilih:
The
joinAttribute
Metode menambahkan bergabung untuk query untuk atribut tertentu yang diminta. Ini masih berfungsi ketika atribut sudah ada di tabel rata, tetapi akan sedikit kurang efisien daripada hanya menggunakan tabel datar.Saya telah menggunakan
left
gabungan di sana, untuk memastikan bahwa ia mengambil produk jikamy_custom_attribute
tidak diatur pada produk-produk itu. Ubah itu untukinner
jika Anda hanya tertarik pada barismy_custom_attribute
yang diatur.Menambahkan ke filter (sesuai ColinM di atas):
Kode di atas akan menambahkannya ke pilih serta mematuhi filter Anda.
(diuji pada CE 1.6.2.0)
sumber
Dalam
Mage_Rss
modul mereka menggunakan metode hacky untuk menonaktifkan tabel datar. Mereka menggunakan fakta, bahwa tabel datar selalu mati di toko admin dan hanya meniru toko admin.Setelah memulai emulasi Anda harus mengatur ulang dengan
emulationModel->stopEnvironmentEmulation()
sumber
ketika Anda membuat atribut itu harus di tingkat Global dan dapat difilter. Dengan cara ini akan dapat digunakan dalam navigasi layared. Juga akan memerlukan atribut menjadi dropdown atau multiselect. Saya pribadi akan menyarankan untuk tidak mengubah file inti agar sesuai dengan kebutuhan Anda dalam hal ini
sumber