Çalışmayan birden çok alan için addAttributeToSelect


10

Ben kullanıcı siparişleri geçmişi almaya çalışıyorum, aşağıdaki sorgu ve onun iyi çalışıyor kullanılır. Ancak siparişle ilgili tüm alanları tablodan döndürüyor

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

Ben sadece belirli alanları getirmek istiyorum, bu nedenle -> addAttributeToSelect ('*')

     used the following code 

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

Ancak "Alan adı belirlenemiyor" hatası alıyorum .

Yanıtlar:


20

Kullanım addFieldToSelect addAttributeToSelect arasında örtmek

Düz model için kullanılan addFieldToSelect

EAV modeli için addAttributeToSelect kullanıcısı


3

Hatayı almanızın nedeni, yöntemin Mage_Sales_Model_Resource_Collection_Abstract::addAttributeToSelectyalnızca öznitelikler için çalıştığı ve bir öznitelik dizisi için çalışmamasıdır.

Özelliğin gerçek olduğundan emin olmak için çağrıyı doğrulayacağından yalnızca bireysel özellikler için çalışır.

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

İçine Mage_Sales_Model_Resource_Collection_Abstract::_attributeToFieldbaktığınızda bunun aşağıdaki gibi çalıştığını görün.

  1. Bir dizeyi iletirseniz, dizeyi döndürür,
  2. Bir nesneyi iletirseniz, bunun bir tür nesne olduğunu doğrular Mage_Eav_Model_Entity_Attributeve öznitelik kodunu döndürür,

Kod aşağıdaki gibi görünür:

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;
}

Gördüğüm gibi seçenekler şunlardır:

  1. Sadece addFieldToSelectbir dizi özellik kodu ile arayın . Nesneleri değil, yalnızca kodları geçtiğiniz için, doğrulamayı alamazsınız, ancak sizin durumunuzda buna ihtiyacınız yoktur.
  2. addAttributeToSelectHer özellik için bir kez arayın .

Ben senin durumunda seçenek biri en iyi olacağını öneririm.


2

AFAIK bir çözüm sadece hepsini tek başına yapmaktır (herhangi bir nedenle kullanmaya karar verdiğinizde addAttributeToSelect:

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

1

Gönderinin başlığı koleksiyona özel olmadığından ... Mage_Catalog_Model_Resource_Product_Collection ek bir parametre joinType'a sahiptir ve bu şekilde kullanılır:

$attributesToSelect = array('name','description');
$collection->addAttributeToSelect($attributesToSelect, 'left');
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.