addAttributeToSelect สำหรับหลายเขตข้อมูลไม่ทำงาน


10

ฉันพยายามรับประวัติการสั่งซื้อของผู้ใช้ใช้แบบสอบถามต่อไปนี้และทำงานได้ดี แต่มันจะส่งคืนทุกคำสั่งที่เกี่ยวข้องกับเขตข้อมูลจากตาราง

    $collection     = Mage::getModel("sales/order")->getCollection()
                               ->addAttributeToSelect('*')
                               ->addFieldToFilter('customer_id', 400)
                               ->setOrder('created_at', 'desc');

ฉันต้องการดึงข้อมูลเฉพาะฟิลด์ดังนั้นในกรณีของ-> addAttributeToSelect ('*')

     used the following code 

 ->addAttributeToSelect(array('created_at','customer_id','increment_id','updated_at','status','entity_id','state'))

แต่ได้รับข้อผิดพลาดเป็น"ไม่สามารถระบุชื่อฟิลด์"

คำตอบ:


20

ใช้addFieldToSelect กรณีของ addAttributeToSelect

addFieldToSelectใช้สำหรับแบบจำลองแบน

ผู้ใช้addAttributeToSelectสำหรับรุ่น EAV


3

เหตุผลที่คุณได้รับข้อผิดพลาดก็คือวิธีนี้Mage_Sales_Model_Resource_Collection_Abstract::addAttributeToSelectใช้ได้กับแต่ละคุณสมบัติเท่านั้นไม่ใช่อาร์เรย์ของแอตทริบิวต์

ใช้งานได้กับแต่ละแอตทริบิวต์เท่านั้นเพราะจะตรวจสอบการโทรเพื่อให้แน่ใจว่าแอตทริบิวต์นั้นเป็นของจริง

public function addAttributeToSelect($attribute)
{
    $this->addFieldToSelect($this->_attributeToField($attribute));
    return $this;
}

เมื่อคุณมองเข้าไปMage_Sales_Model_Resource_Collection_Abstract::_attributeToFieldคุณจะเห็นว่ามันใช้งานได้ดังต่อไปนี้

  1. หากคุณผ่านสตริงแล้วมันก็จะกลับสตริง
  2. หากคุณผ่านวัตถุมันจะตรวจสอบว่านี่เป็นวัตถุประเภทMage_Eav_Model_Entity_Attributeและส่งคืนรหัสแอตทริบิวต์

รหัสมีลักษณะดังนี้:

protected function _attributeToField($attribute)
{
    $field = false;
    if (is_string($attribute)) {
        $field = $attribute;
    } elseif ($attribute instanceof Mage_Eav_Model_Entity_Attribute) {
        $field = $attribute->getAttributeCode();
    }
    if (!$field) {
        Mage::throwException(Mage::helper('sales')->__('Cannot determine the field name.'));
    }
    return $field;
}

ดังนั้นตัวเลือกของคุณมีดังต่อไปนี้ตามที่เห็น:

  1. เพียงโทรaddFieldToSelectไปยังอาเรย์ของรหัสคุณลักษณะ เนื่องจากคุณเป็นเพียงรหัสผ่านและไม่ใช่วัตถุคุณจะไม่ได้รับการตรวจสอบ แต่คุณอาจไม่ต้องการสิ่งนี้ในกรณีของคุณ
  2. โทรaddAttributeToSelectหนึ่งครั้งสำหรับแต่ละคุณสมบัติ

ฉันขอแนะนำในกรณีที่ตัวเลือกของคุณหนึ่งจะดีที่สุด


2

AFAIK การทำงานโดยรอบเป็นเพียงการทำสิ่งเหล่านั้นอย่างแปลกประหลาด (ไม่ว่าด้วยเหตุผลใดก็ตามที่คุณตั้งใจจะใช้addAttributeToSelect:

->addAttributeToSelect('created_at') 
->addAttributeToSelect('customer_id') 
->addAttributeToSelect('increment_id') 
->addAttributeToSelect('updated_at') 
->addAttributeToSelect('status') 
->addAttributeToSelect('entity_id')
->addAttributeToSelect('state')

1

เนื่องจากชื่อของโพสต์ไม่ได้เจาะจงเฉพาะการสะสม ... Mage_Catalog_Model_Resource_Product_Collection มีพารามิเตอร์เพิ่มเติม joinType ซึ่งจะใช้ดังนี้:

$attributesToSelect = array('name','description');
$collection->addAttributeToSelect($attributesToSelect, 'left');
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.