1

Magentoのコレクションの完全な動作を理解できません。次に、問題について説明します。

プロジェクトの要件については、GoogleShoppingのフィードでいくつかの商品を除外するカスタム属性を追加する必要があります。次に、phpスクリプトのインストールでこの属性を追加します

<?php
  $installer = $this;
  $installer->startSetup();
  $installer->addAttribute('catalog_product', 'in_googleshopping_feed', array(
    'group'                    => 'General',
    'type'                     => 'int',
    'input'                    => 'select',
    'label'                    => 'In GoogleShoppint feed',
    'global'                   => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
    'visible'                  => 1,
    'required'                 => 0,
    'default'          => 1,
    'visible_on_front'         => 0,
    'is_html_allowed_on_front' => 0,
    'sort_order'               => 32,
    'is_configurable'          => 0,
    'source'                   => 'eav/entity_attribute_source_boolean',
    'searchable'               => 0,
    'filterable'               => 0,
    'comparable'               => 0,
    'unique'                   => false,
    'user_defined'             => false,
    'is_user_defined'          => false,
    'used_in_product_listing'  => true
  )
  );


  $installer->endSetup();

次にオブザーバーで、これの値を次のように取得してみます。

$products = Mage::getModel('catalog/product')->getCollection()
        ->addAttributeToSelect('*')
            //->addAttributeToSelect('in_googleshopping_feed');
        ->addAttributeToFilter('in_googleshopping_feed',0);

これは私の疑問です、なぜコレクションにこの属性がないのですか?

ただし、次のスニペットでProduct_Modelの値を取得できます。

$products = Mage::getModel('catalog/product')->getCollection()
            ->addAttributeToSelect('*');
$prodIds=$products->getAllIds();
foreach($prodIds as $productId):
   $product = Mage::getModel('catalog/product')->setStoreId('1');
   $product->load($productId);
   var_dump($product->getData('in_googleshopping_feed'));
endforeach;

次に、私の大きな疑問は、新しい属性でコレクションをフィルタリングできないのはなぜですか?addAttributeToSelect('*')メソッドを使用すると、すべてのフィールドがコレクションに追加されると思います。

誰かが私を助けることができますか?ありがとう

4

1 に答える 1

2

最初に一目でわかるのは、の2番目のパラメーターはaddAttributeToFilter配列でなければならないということです。このような:

addAttributeToFilter('in_googleshopping_feed', array('eq', 0));
于 2012-07-05T13:41:28.453 に答える