3

1 行のデータを含むコレクションがあります。私が次のことをすると、

$collection->getData();

以下のような配列が得られます。

  array(1) {
    [0] => array(3) {
       ["id"] => string(1) "1"
       ["field1"] => string(10) "Field 1 Data"
       ["field2"] => string(10) "Field 2 Data"
    }
  }

しかし、私が行う$collection->getField1()と、未定義のメソッドと表示されます。私が知る限り、php マジック ゲッターはこのように動作するはずです。ではない?

foreach コンストラクトなしでこの値を取得する方法についてのアイデア。

4

1 に答える 1

13

魔法の getter および setter メソッドは、 から継承する Magento オブジェクトにのみ適用されますVarien_Object。プラクティスでは、モデルとブロックです。コレクションはモデルでもブロックでもありません。コレクションは、foreach0 ~ N 個のモデル オブジェクトを含む可能なオブジェクトです。

コレクションのgetDataメソッドは、コレクション内の各モデルの生の PHP 配列を返します。

#File: lib/Varien/Data/Collection/Db.php
public function getData()
{
    if ($this->_data === null) {
        $this->_renderFilters()
             ->_renderOrders()
             ->_renderLimit();
        $this->_data = $this->_fetchAll($this->_select);
        $this->_afterLoadData();
    }
    return $this->_data;
}

おそらくやりたいことは、コレクションから最初のモデルを取得し、次にそのデータを取得することです。

$data = $collection->getFirstItem()->getData();
$field1 = $collection->getFirstItem()->getField1();
于 2013-05-14T04:30:12.487 に答える