ความแตกต่างของ addAttributeToFilter () Vs addFieldToFilter () คืออะไร?


21

ฉันสับสนนิดหน่อยความแตกต่างของฟังก์ชั่น addAttributeToFilter () และ addFieldToFilter () คืออะไร ฉันตรวจสอบไฟล์หลักในวีโอไอพี แต่ฉันไม่สามารถคิดออกความคิดที่ชัดเจน เพราะสำหรับบางคอลเลกชันใน magento ได้ใช้ addAttributeToFilter () และบางส่วนได้ใช้ addFieldToFilter () กรุณาชี้แจงเกี่ยวกับเรื่องนี้จะเป็นความช่วยเหลือที่ดี ขอบคุณล่วงหน้า.

คำตอบ:


45

addAttributeToFilter() ใช้เพื่อกรองคอลเล็กชัน EAV

addFieldToFilter() ใช้เพื่อกรองคอลเล็กชันที่ไม่ใช่ EAV

รุ่น EAV เป็นผลิตภัณฑ์ตัวอย่างลูกค้าการขายและอื่น ๆ เพื่อให้คุณสามารถใช้addAttributeToFilter()สำหรับเอนทิตีเหล่านั้น

addFieldToFilter()ถูกแมปกับaddAttributeToFilter()เอนทิตี EAV addFieldToFiler()ดังนั้นคุณก็สามารถใช้

แก้ไข:

คุณสามารถดูapp/code/core/Mage/Eav/Model/Entity/Collection/Abstract.phpที่การทำแผนที่เสร็จสิ้น:

public function addFieldToFilter($attribute, $condition = null) {
    return $this->addAttributeToFilter($attribute, $condition);
}

คำตอบที่ยอดเยี่ยม ไชโย มันช่วยให้ฉันรู้ว่าสิ่งต่าง ๆ อยู่ที่ไหน มันแจ้งให้ฉันทราบว่าสามารถใช้ EAV ได้แม้ว่าจะสามารถจัดการกับ EAV ที่ไม่ใช่ มันสามารถใช้การได้และให้เครื่องมือสำหรับผู้อ่านในการค้นหามากกว่าไม่ใช่แค่คำตอบสำหรับคำถามนี้ คุณจะตอบคำถามเกี่ยวกับความแตกต่างระหว่างaddAttributeToSelect()vs addAttributeToFilter()หรือไม่?
ahnbizcad

1
ความแตกต่างคือส่วนของ SQL ที่เชื่อมโยง: addAttributeToSelect()อ้างอิงไปยังSELECTส่วนของแบบสอบถามและเลือกเฉพาะ colums เฉพาะaddFAttributeToFilter()จะใช้ในการกรองคอลเลกชันและจะเพิ่มเข้าไปในWHEREส่วนนั้น
Anna Völkl

3

สำหรับ EAV นั้นไม่มีความแตกต่าง

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

ข้อสันนิษฐานของฉันถึงแม้ว่าฉันจะผิดก็คือสำหรับ EAV พวกเขาใช้การตั้งชื่อแอตทริบิวต์เนื่องจากแต่ละแอตทริบิวต์เพื่อกรองอยู่ในตัวเองเป็นรายการแบบสแตนด์อโลนที่มีการตั้งค่าของตัวเองเป็นต้นโดยที่เมื่อไม่ได้ใช้ EAV จะเป็นเพียงคอลัมน์อื่นบน ตารางฐานข้อมูลและชื่อ Field ทำงานได้ดี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.