작동하지 않는 여러 필드의 경우 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

EAV 모델에 대한 addAttributeToSelect 사용자


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각 속성마다 한 번씩 호출하십시오 .

나는 당신의 경우에 옵션 1이 가장 좋을 것이라고 제안 할 것입니다.


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.