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 та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.