簡體   English   中英

需要幫助來了解Magento產品集合對象和目錄/產品模型

[英]Need help understanding Magento product collection objects and the catalog/product model

我繼承了一個由老開發商負責的Magento項目。 由於Magento的經驗非常有限,我想了解產品系列和catalog/product模型的工作方式。

具體來說,我想知道為什么集合和產品對象如此之大?

我有這樣的代碼:

<?php $_productCollection = $this->getLoadedProductCollection(); ?>
<?php foreach ($_productCollection as $_product): ?>
    <?php $_product = Mage::getModel( 'catalog/product' )->load( $_product->getId() ); ?>
    <?php print $this->getLayout()->createBlock('mymodule_name/category_products_item')->setProduct($_product)->toHtml() ?>
<?php endforeach ?>

當我執行print_r($_productCollection)print_r($_product)我得到大量數據,而我真正想要的只是一些產品屬性(ID,名稱,價格,圖像URL等)。

我習慣了自定義的關系數據庫平台,如果需要使用產品,我會做一些非常簡單的事情,例如SELECT id,name,price FROM products; 我完全不確定如何在Magento中實現這一目標。 是否創建自定義模型或其他內容?

所以任何人都可以告訴我:

1)為什么上述物體這么大?

2)如果我只需要一些產品屬性(如上所述),那么有沒有辦法將對象限制為僅那些屬性以減小其大小?

3)以這種方式使用對象是否會對性能或內存造成影響?

非常感謝!

您可以通過多種方式從magento訪問數據:

  • 使用load()=>它將加載相對於模型的所有數據(屬性)。 這是非常緩慢的性能殺手。 對於產品,您應該僅在產品頁面上使用load()(因為您將在該頁面上使用的所有數據都與單個對象有關。因此您可以完整地加載它)

  • 使用collection =>時,當您需要檢索對象列表時,必須(至少)使用一個集合。 由您決定要檢索的屬性列表。 您可以添加屬性以選擇/過濾,集合將設法在后台對EAV表進行SQL連接等。

  • 在處理復雜對象時,使用自定義SQL =>集合可能會很慢(一個集合會初始化許多您可能不需要的SQL連接到表)...從BDD訪問數據的最后一種方法是在ResourceModel中創建自己的SQL

在您顯示的腳本中,存在一個巨大的錯誤:您在對集合進行迭代的foreach中加載完整的模型。 您絕對不能這樣做,如果您必須load()產品,我想是因為您沒有在集合中找到屬性? 在這種情況下,您只需要修改集合即可檢索屬性。

例如,對於某個產品,magento提供了一種向您實例化的任何product-> collection自動添加(或刪除)屬性的方法。 (請參閱Mage_Catalog的config.xml中的frontend / product / collection / attributes XML標簽)

這是因為magento使用緩存遞歸OMG系統並使關系數據庫開發人員發瘋。 我就是其中之一。 但是,據我了解,我最好使用Mage :: getModel('model')-> getCollection(),然后在Magento存儲啟動時使用php進行sql之王搜索,因為它使biggggggg緩存架構可以更快地提供一些信息,這是一種索引環。

因此,如果只需要幾個字段,則可以使用.....-> getCollection()-> addAttributeToSelect('name')。 對於前。

GL對您的magento理解。

暫無
暫無

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

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