Apa perbedaan dari addAttributeToFilter () Vs addFieldToFilter ()?

21

Saya agak bingung apa perbedaan fungsi addAttributeToFilter () dan addFieldToFilter (). Saya memeriksa file inti di Magento. Tetapi saya tidak dapat menemukan ide yang jelas. Karena untuk beberapa koleksi di magento telah menggunakan addAttributeToFilter () dan beberapa telah menggunakan addFieldToFilter (). Harap klarifikasi apa pun tentang ini akan sangat membantu. Terima kasih sebelumnya.

Sukeshini
sumber

Jawaban:

45

addAttributeToFilter() digunakan untuk memfilter koleksi EAV.

addFieldToFilter() digunakan untuk memfilter koleksi Non-EAV.

Model-EAV misalnya produk, pelanggan, penjualan, dll sehingga Anda dapat menggunakannya addAttributeToFilter()untuk entitas tersebut.

addFieldToFilter()dipetakan ke addAttributeToFilter()untuk entitas EAV. Jadi Anda bisa menggunakannya addFieldToFiler().

Edit:

Anda dapat melihat di app/code/core/Mage/Eav/Model/Entity/Collection/Abstract.phpmana Pemetaan dilakukan:

public function addFieldToFilter($attribute, $condition = null) {
    return $this->addAttributeToFilter($attribute, $condition);
}
Anna Völkl
sumber
jawaban yang bagus bravo. itu memungkinkan saya untuk mencari tahu di mana letak semuanya. itu memberitahu saya bahwa seseorang dapat digunakan dengan EAV bahkan jika itu juga dapat menangani non EAV. itu dapat ditindaklanjuti, dan memberikan alat bagi pembaca untuk mencari tahu lebih banyak, bukan hanya jawaban untuk pertanyaan khusus ini. Maukah Anda menjawab pertanyaan tentang perbedaan antara addAttributeToSelect()vs addAttributeToFilter()?
ahnbizcad
1
Perbedaannya adalah bagian dari SQL yang berlaku: addAttributeToSelect()referensi ke SELECTbagian permintaan dan hanya memilih kolom tertentu. addFAttributeToFilter()digunakan untuk memfilter koleksi dan karenanya ditambahkan ke WHEREbagian tersebut.
Anna Völkl
3

Sehubungan dengan EAV tidak ada perbedaan.

/app/code/core/Mage/Eav/Model/Entity/Collection/Abstract.php
public function addFieldToFilter($attribute, $condition = null)
{
    return $this->addAttributeToFilter($attribute, $condition);
}

Asumsi saya, meskipun saya bisa salah, adalah bahwa untuk EAV mereka menggunakan penamaan atribut karena setiap atribut untuk memfilter itu sendiri merupakan item yang berdiri sendiri yang memiliki pengaturan sendiri dll. Dimana ketika tidak menggunakan EAV itu hanya kolom lain di tabel database dan nama Field berfungsi dengan baik.

David Manners
sumber