Saya memiliki satu koleksi dalam metode di mana saya ingin melakukan dua operasi berbeda pada koleksi ini. Jadi, saya ingin dua salinan terpisah dari koleksi yang sama, dan kemudian menetapkan satu dari dua koleksi untuk koleksi asli lagi dan mengembalikannya.
Untuk mempermudah ini, anggaplah saya memiliki koleksi objek yang disebut $collection
.
Sekarang, saya mencobanya dengan kloning PHP karena saya tidak tahu apakah ada kloning koleksi Magento bawaan atau tidak.
$coll1 = clone $collection;
$coll2 = clone $collection;
Sekarang saya mencoba untuk melakukan operasi yang berbeda pada dua klon yang terpisah dari koleksi asli, semacamnya.
$coll1->getSelect()->where('some where condition');
$coll2->getSelect()->where('some different where condition');
if($coll1->count() == 0) {
$collection = $coll2;
} else {
$collection = $coll1;
}
Namun yang aneh adalah, kedua koleksi hasil kloning ini memiliki kedua kondisi yang ditentukan! Kondisi $ coll1 diterapkan ke $ coll2 bersama dengan kondisi $ coll2, dan sebaliknya.
Adakah yang tahu bagaimana mencapainya?
Terima kasih!
sumber
$collection->getSelect()
dan tidak dalam koleksi itu sendiri.Untuk memperluas jawaban @ davidalger, Anda dapat mengatur ulang pilihan jika Anda ingin melakukan operasi yang berbeda dari hitungan - seperti:
Berhati-hatilah, ini dapat memiliki efek yang merugikan nantinya dalam proses karena ini memodifikasi koleksi.
Cara yang lebih baik adalah dengan mengkloning pilih entah bagaimana, tetapi salinan dangkal tidak akan memotongnya karena objek berisi tipe kompleks (Varien_Db_Select atau Zend_Db_Select memiliki
__clone
metode).Salah satu cara untuk menyiasatinya adalah dengan menyimpan data pilih, memodifikasinya, menjalankan kueri Anda, lalu memasukkan kembali data pilih asli.
Lihat di sini untuk contoh: https://ka.lpe.sh/2013/05/23/magento-clone-collection-how-to-clone-collection-in-magento/
sumber