簡體   English   中英

如何將自定義數據添加到已加載的Magento集合

[英]How to add custom data to loaded Magento collection

我一直在努力將兩個不同的集合合並在一起,但我發現很難做到。

實際上,我唯一要做的就是將另一個屬性添加到已實例化(我認為)的集合中。

這是我的代碼:

private function _addProductsToBanners()
{
    $skus = $this->_getBannersSkus();

    $products = Mage::getResourceModel('catalog/product_collection')
        ->addFieldToFilter('sku', array('in' => $skus))
        ->addAttributeToSelect(array('name'));

    /** @var Developer_Banners_Model_Resource_Banner_Collection $banners */
    $banners = $this->banners;

    foreach ($banners as $banner) {
        foreach ($products as $product) {
            if ($banner->getSku() == $product->getSku())
            {
                $banner->setData('product', 1);
            }
        }
    }
    echo '<pre>';
    print_r($banners->getData());
    echo '</pre>';
}

這里的問題是,當使用getData()打印$banners集合時,我看不到[product]屬性,但是如果不使用getData()則會看到它。

如果您有任何想法,我將不勝感激!

謝謝!

Developer_Banners_Model_Resource_Banner_Collection繼承自Mage_Core_Model_Resource_Db_Collection_Abstract並添加項目時,該項目不會添加到$ _data屬性,而是添加到$ _items屬性。

protected function _addItem($item)
{
   $this->_items[] = $item;
   return $this;
}

當您調用getData()方法時,$ _ data屬性仍為null。 然后,getData()方法將從數據庫中獲取數據並返回結果。

public function getData()
{
    if ($this->_data === null) {


        $this->_renderFilters()
             ->_renderOrders()
             ->_renderLimit();
        /**
         * Prepare select for execute
         * @var string $query
         */
        $query       = $this->_prepareSelect($this->getSelect());
        $this->_data = $this->_fetchAll($query, $this->_bindParams);
        $this->_afterLoadData();
    }
    return $this->_data;
}

通過僅對對象進行迭代,即可執行each()方法:

public function each($obj_method, $args=array())
    {
        foreach ($args->_items as $k => $item) {
            $args->_items[$k] = call_user_func($obj_method, $item);
        }
    }

此方法使用$_items屬性作為數據源。 不幸的是,我現在無法解釋這種行為。

我發現的是,直到您實際調用getData() ,才設置集合_data屬性,但是實際上設置了每個集合成員上的_data ,因此可以在迭代集合時訪問新添加的屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM