複数のフィールドの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回呼び出します。

私はあなたのケースのオプションの1つが最善であることを提案します。


2

私の知る限り、回避策は、それらをすべて単独で実行することです(使用することに決めた理由にかかわらず)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.