Itu bukan kesalahan ketik.
Saya sadar bahwa saya perlu menggunakan 'finset' untuk memfilter atribut multi-pilih saya; namun, saya mencoba memfilter beberapa nilai sekaligus dan mendapatkan:
Incorrect parameter count in the call to native function 'FIND_IN_SET
.
Berikut beberapa contoh kode:
foreach ($options as $option) {
// $option[0] contains an attribute ID as a string
$attribute = Mage::getModel('catalog/resource_eav_attribute')->load($option[0]);
if ($attribute->getFrontendInput() == 'multiselect') {
$collection->addAttributeToFilter($attribute->getAttributeCode(), array('finset' => $option[1]));
} else {
$collection->addAttributeToFilter($attribute->getAttributeCode(), array('in' => $option[1]));
}
}
Apa yang saya miliki di frontend adalah seperangkat bidang, masing-masing set sesuai dengan atribut tertentu dan berisi kotak centang untuk setiap nilai atribut. Berdasarkan kiriman ini, koleksi harus menyaring apa yang telah dipilih.
Semuanya berfungsi dengan baik kecuali untuk satu kotak di mana saya mencoba memfilter dua opsi multi-pilih secara bersamaan. Jika saya hanya memilih salah satunya, pencarian berfungsi dengan baik. Jika saya memilih dua atau lebih, saya mendapatkan kesalahan MySQL yang disebutkan di atas.
Ada ide? Atau apakah saya dipaksa untuk menggunakan pernyataan SQL khusus untuk membangun filter ini?
sumber
catalog_product_index_eav_idx
tabel.Jawaban:
Dari apa yang saya pahami, Anda ingin mengirim 2 atau lebih nilai dan memfilternya menggunakan mereka
OR
.Sesuatu seperti ini:
$v1 & $v2
adalah nilai-nilai kotak centang AndaUntuk itu Anda perlu meneruskan ke
addAttributeToFilter
array dan array.Berikut ini adalah kemungkinan implementasi.
sumber
Kode ini akan menggabungkan dua
finset
kondisi denganOR
:sumber