Saya telah mendengar berkali-kali bahwa mereka berdua sama. Tapi saya menghadapi masalah aneh, dalam koleksi produk modul CatalogSearch, count () mengembalikan jumlah produk yang benar sementara getSize () mengembalikan nol.
Jadi, pada dasarnya inilah yang saya dapatkan:
$collection->count(); //correct count
$collection->getSize(); //0
Tapi saya ingin getSize () memiliki hitungan yang benar karena memutuskan apakah akan menampilkan pagination dan produk di halaman pencarian atau tidak. Saya menggunakan Inner Join, Left Join dan Where condition hanya dalam koleksi untuk lebih spesifik.
Adakah ide mengapa saya mendapatkan masalah aneh ini?
Terima kasih
MEMPERBARUI:
Pertanyaan saya sebelumnya, Bagaimana cara mengkloning koleksi di Magento? Saya ingin melakukan dua operasi berbeda pada satu koleksi. Koleksi pertama menunjukkan getSize () yang benar, tetapi kemudian jika getSize () adalah nol, saya menghapus klausa WHERE dan memberikan kondisi WHERE baru. Setelah ini, saya mendapatkan SQL mentah yang benar seperti yang saya harapkan, dan menjalankannya di MySQL juga memberikan serangkaian catatan yang benar, tetapi hanya getSize () pada koleksi yang memberikan nol hitungan.
Jadi pada dasarnya saya mungkin perlu memuat ulang koleksi, karena getSize () mengambil hitungan lama. Masuk akal?
sumber
getSize()
? Terima kasih!CatalogSearch
modul tidak ada yang menimpagetSize()
ataugetSelectCountSql()
. Ini seharusnya bekerja secara default, kecuali jika Anda menambahkan beberapa kode khusus. Bisakah Anda memposting cara Anda membangun koleksi?_totalRecords
. Anda dapat mencoba mengkloning koleksi sebelum memanggilgetSize()
koleksi asli. Mungkin itu akan berhasil.$sql = $collection->getSelectCountSql(); return $collection->getConnection()->fetchOne($sql);
Hati-hati. Ini benar, tetapi metode ini ditimpa
Varien_Data_Collection_Db
seperti yang dijelaskan oleh MariusLihat saja
Jadi seharusnya level rendah ini sama. Kedua metode memuat koleksi dan menghitung item.
MEMPERBARUI
Oh saya melihat masalah: getSize () cache _totalRecords, ini berarti tidak dihitung ulang. Periksa di mana
_totalRecords
diatur?sumber
getSize()
?getSize()
tidak memuat koleksi untuk catatan yang berasal dari basis data. Tidak kecuali Anda mengganti metode dan menyuruhnya memuat koleksi.echo count($collection->load()->getItems());
memberikan hitungan yang benar, tetapi sekali lagi saya ingingetSize()
bekerja.Jawaban ini muncul di google untuk "magento getSize salah" dan pencarian serupa jadi saya ingin menambahkan skenario yang mungkin berguna bagi seseorang
Ketika Anda memiliki pernyataan grup dalam permintaan Anda dan Anda melakukan
Mysql akan mengembalikan hitungan untuk SETIAP grup, jadi Varien_Data_Collection_Db :: getSize () akan mengembalikan jawaban yang salah, ini karena fungsi ini mengambil baris pertama:
Saat populasinya
Ini memilih baris pertama dan karenanya mengembalikan total dari kelompok pertama sebagai ukuran total.
Saya akhirnya menghasilkan kode ini untuk dihitung, berdasarkan nilai unik atribut dalam permintaan saya.
sumber
Kalau-kalau Anda berakhir di sini, ada perbaikan sederhana lain untuk dicoba:
dan pilih mereka semua (bahkan jika mereka menunjukkan "Hijau, tidak perlu indeks ulang" dan memaksa mereka untuk mengindeks ulang.
Ini menyelesaikan
getSize()
masalah kosong saya , yang pada gilirannya, memungkinkan permintaan database Khusus dan Baru untuk menemukan produk, memenuhi persyaratan "jika" dan membuat dengan benar.sumber
Ketika
count($collection)
berbeda dari yang$collection->getSize()
saya miliki denganreindex
produk, maka semuanya bekerja dengan baik.sumber
Ada perbedaan utama Untuk getSize () koleksi produk tidak dimuat. Untuk count () itu akan memuat seluruh koleksi produk. Jadi untuk katalog besar tidak disarankan menggunakan fungsi hitung dalam koleksi apa pun.
sumber