0

コレクションを扱うときにフィールドを制限する方法は知っていますが、getModel()->load($id) を使用するときに選択したフィールドを制限できるかどうか疑問に思っています。

私の思考プロセスは、使用する ID を知っている場合です。

Mage::getModel('model')->load($id)

とは対照的に:

Mage::getModel('model')->getCollection()->addFieldToFilter('id', $id)->getFirstItem();

問題は load($id) がすべてを返すことです。コレクションで addFieldToSelect を使用できることはわかっています。load() を使用する場合に相当するものはありますか? これをグーグルで検索すると、コレクションメソッドが取得されます。

ありがとう、GG

編集:コレクションの方法がそれがどのように行われたかである場合、それは問題ありません。load() を使用して実行できないことを確認したいだけです。

4

2 に答える 2

2

いいえ、おそらくあなたがやりたいことではないモデルコードを完全に書き直すことを除いて、コレクションを使用する代替手段はありません。モデル ロード呼び出しは、完全なエントリをロードするためにのみ使用できます。指定できるのは、ロードに使用する属性です。例えば:

Mage::getModel('catalog/product')->load($sku,'sku')

sku ごとに製品を読み込みます。

実際、モデルのロード自体は、次のようにしてそのリソースに任せるだけです。

$this->_getResource()->load($this, $id, $field);

ただし、リソース ロード メソッドでは、特定の属性をフィルター処理する機能も提供されないため、常にフル パックをロードするか、コレクションを使用します。

于 2012-12-19T22:22:28.880 に答える
2

(現在行っているように) アイテムを 1 つだけ含むコレクションをロードし、使用する属性を選択することができます。

addAttributeToSelect('you_attribute_code_here')

これにより、返したい属性のみを含むコレクションが返されます (ただし、1 つのアイテムが含まれます)。例:

$productIds = array(166);
$collection = Mage::getModel('catalog/product')->getCollection()
    ->addAttributeToSelect('description')
    ->addFieldToFilter('entity_id', array('in' => $productIds));

$product = $collection->getFirstItem();
于 2012-12-19T22:04:24.070 に答える