addAttributionToSelect cho nhiều trường không hoạt động


10

Tôi đang cố gắng để có được lịch sử đơn đặt hàng của người dùng, sử dụng truy vấn sau đây và nó hoạt động tốt. Nhưng nó trả về tất cả các trường liên quan đến thứ tự từ bảng

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

Tôi chỉ muốn tìm nạp các trường cụ thể, vì vậy trong trường hợp -> addAttributionToSelect ('*')

     used the following code 

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

Nhưng nhận được lỗi là "Không thể xác định tên trường."

Câu trả lời:


20

Sử dụng addFieldToSelect incA của addAttributionToSelect

addFieldToSelect được sử dụng cho mô hình phẳng

addAttributionToSelect người dùng cho mô hình EAV


3

Lý do mà bạn nhận được lỗi là phương thức Mage_Sales_Model_Resource_Collection_Abstract::addAttributeToSelectchỉ hoạt động cho các thuộc tính riêng lẻ chứ không phải là một mảng các thuộc tính.

Nó chỉ hoạt động cho các thuộc tính riêng lẻ vì nó sẽ xác nhận cuộc gọi để đảm bảo thuộc tính là có thật.

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

Khi bạn nhìn vào Mage_Sales_Model_Resource_Collection_Abstract::_attributeToFieldbạn thấy rằng nó hoạt động như sau.

  1. Nếu bạn truyền một chuỗi thì nó sẽ trả về chuỗi đó
  2. Nếu bạn truyền một đối tượng thì nó sẽ xác nhận rằng đây là một đối tượng có kiểu Mage_Eav_Model_Entity_Attributevà trả về mã thuộc tính,

Mã này trông như sau:

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

Vì vậy, các tùy chọn của bạn là như sau khi tôi thấy nó:

  1. Đơn giản chỉ cần gọi addFieldToSelectvới một loạt các mã thuộc tính. Vì bạn chỉ truyền mã và không phải đối tượng nên bạn sẽ không nhận được xác thực, nhưng có lẽ bạn không cần điều này trong trường hợp của mình.
  2. Gọi addAttributeToSelectmột lần cho mỗi thuộc tính.

Tôi sẽ đề nghị trong trường hợp của bạn tùy chọn một sẽ là tốt nhất.


2

AFAIK một công việc xung quanh chỉ là để thực hiện tất cả chúng một cách đơn lẻ (vì bất kỳ lý do gì bạn quyết tâm sử dụng addAttributeToSelect:

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

1

Vì tiêu đề của bài đăng không phải là bộ sưu tập cụ thể ... Mage_Catalog_Model_Resource_ Productt_Collection có một tham số bổ sung tham gia được sử dụng như vậy:

$attributesToSelect = array('name','description');
$collection->addAttributeToSelect($attributesToSelect, 'left');
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.