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');
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.