2012-04-24 15 views
4

誰かが私にこの問題を解決させてくれることを願っています。コレクションを使用してMagentoカタログモデルからデータを読み込もうとしています。Magentoのコレクションリクエストに属性を追加する

$model = Mage::getModel('catalog/product'); 
$collection = $model->getCollection(); 
$collection->addAttributeToSelect('short_description'); 
$collection->addFieldToFilter('SKU',array('like' => array('%EBOOK%'))); 
$collection->load(); 
var_dump($collection->getData()); 

これは私が$collection->addAttributeToSelect()法で要求されているフィールドフラットカタログ製品テーブル内のすべてのフィールドを持つオブジェクトのダンプを生成するが、ない:コードは次のようになります。私がこのメソッドで指定するフィールド(たとえ '*')に関係なく、標準的なフィールドセット以外のものを返すコレクションを取得することはできません。私はまた、動作するはずの$collection->removeFieldFromSelect(NULL)を使用して任意のフィールドを解除することはできません。

私は何か愚か/間違っている/両方ですか?

ありがとうございます。

+0

'echo get_class($ collection);の出力は何ですか? – benmarks

+0

こんにちはBenmarks。出力は 'Mage_Catalog_Model_Resource_Ev_Mysql4_Product_Collection'です – MJA

+0

この男([link] http://www.magentocommerce.com/boards/viewthread/48044/)はまったく同じ問題をいくつかの点で持っていたようです... – MJA

答えて

4

これは、コレクションでgetData()に電話したものの、このコレクションの製品ではないためです。

これがなぜ起こるか私は実際に分析することはありませんが、あなたは

foreach ($collection as $product) { 
    var_dump($product->getData()); 
} 

代わりの

$collection->load(); 
var_dump($collection->getData()); 

を使用する場合は、あなたが期待しているデータを取得します。

+0

Jürgen、あなた天才です、ありがとう!私は、属性がストレートコレクションオブジェクトで利用可能にならない理由を理解できませんが、本当に重要ではありません - あなたのメソッドがより多くのクエリを伴うかどうかを確認するためにSQLログをチェックしました。より効率的なクエリ(少なくともSQLコードの点で)。 – MJA

+0

Magentoのコレクションは、エンティティデータの集約、ソート、およびフィルタリングをモデル化します。コレクションオブジェクトは、結果に繰り返しアクセスするためのメタオブジェクトと考えることができます。 'Mage_Core_Resource_Db_Collection_Abstract'、' Varien_Data_Collection_Db'および 'Varien_Data_Collection'を参照してください。 – benmarks

関連する問題