Saya sedang membangun koleksi produk, yang akan menemukan hasil dari atribut multiselect.
(kode yang relevan yang menambahkan finset ke koleksi - disesuaikan untuk menampilkan nilai id nyata)
$attribute = Mage::getModel('eav/config')->getAttribute('catalog_product', 'measurement');
$value = array('finset' => array('237',
'236',
'235',
'234',
'233',));
$collection->addAttributeToFilter($attribute, $value);
Sql yang dihasilkan (dengan filter visiblity ditambahkan) adalah sebagai berikut:
SELECT DISTINCT
e . *,
at_measurement.value AS measurement,
at_visibility.value AS visibility
FROM
catalog_product_entity AS e
INNER JOIN
catalog_product_entity_varchar AS at_measurement ON (at_measurement.entity_id = e.entity_id) AND (at_measurement.attribute_id = '983') AND (at_measurement.store_id = 0)
INNER JOIN
catalog_product_entity_int AS at_visibility ON (at_visibility.entity_id = e.entity_id) AND (at_visibility.attribute_id = '526') AND (at_visibility.store_id = 0)
WHERE
(e.attribute_set_id IN ('74')) AND (FIND_IN_SET('237',
'236',
'235',
'234',
'233',
at_measurement.value)) AND (at_visibility.value IN ('2' , '4'))
GROUP BY e.entity_id
Masalahnya adalah saya mendapatkan kesalahan sql:
"SQLSTATE[42000]: Syntax error or access violation: 1582 Incorrect parameter count in the call to native function 'FIND_IN_SET'"
dan saya (berpikir) Saya dapat melihat alasannya: Beberapa nilai multiseleksi hanya memiliki satu opsi, sehingga tidak ada nilai yang dipisahkan koma untuk memenuhi syarat untuk FINSET
Apakah saya benar mengapa kesalahan ini terjadi? Bagaimana saya bisa menulis objek koleksi ini untuk memperhitungkan ini?
Jika tidak di atas, apa yang saya lewatkan?
Hasil dari menjalankan sql di mysql workbench, minus klausa find_in_set:
product-collection
multiselect-attribute
ProxiBlue
sumber
sumber
Jawaban:
Coba gunakan addAttributeToFilter dengan atau ketentuan
Atau
sumber