[英]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.