2016-01-14 65 views
2

我試圖讓商店視圖具體產品屬性值對所有(實際過濾列表,但是這無關緊要)同類產品這樣:按預期的方式返回Magento2得到的產品集合

<?php 

/* @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $collectionFactory */ 
$collection = $collectionFactory->create()->setStoreId(3)->load(); 

foreach ($collection as $product) { 
    var_dump($product->getSku()); 
    var_dump($product->getName()); 
} 

SKU(因爲它是通用反正)但產品名稱不是 - 而是返回NULL

它在adminhtml產品中正常工作編輯controller其中使用builder。唯一的區別是編輯控制器使用Model\Product模型;由於某種原因收集與Model\Product\Interceptor一起使用。 已嘗試使用Model\ProductFactory(這是如何在編輯控制器中完成的)加載循環中的每個產品 - 這樣做$product->getName()返回相應的值(但我無法獲得其他相關產品屬性)。在循環中再次加載產品是錯誤的。

因此問題:對於給定的商店視圖,檢索產品和獲取產品屬性(描述,重量等)值的預期方式是什麼?

+2

Sku是靜態屬性,這意味着它在'catalog_product_entity'表中。由於您正在創建集合,因此不會添加其他屬性。您可能關閉了產品的平板電腦,這就是爲什麼不添加任何屬性的原因。嘗試在load()之前添加' - > addAttributeToSelect('name')'' – Zefiryn

+0

@Zefiryn謝謝 - 這就是訣竅。 '使用平面目錄產品'配置值默認爲'No' – werd

回答

4
<?php 

$objectManager = \Magento\Framework\App\ObjectManager::getInstance(); 

$productCollection = $objectManager->create('Magento\Catalog\Model\ResourceModel\Product\CollectionFactory'); 

$collection = $productCollection->create() 
      ->addAttributeToSelect('*') 
      ->load(); 

foreach ($collection as $product){ 
    echo 'Name = '.$product->getName().'<br>'; 
} 

?> 
+1

默認Magento2設置'addAttributeToSelect('*')'由於某種原因不起作用。爲每個必需的屬性顯式調用'addAttributeToSelect($ attribute)'當然可以工作 – werd

+0

'addAttributeToSelect('*')'適用於v2.1.2。但是,不是循環遍歷整個集合,返回6個隨機產品的最有效方法是什麼? – 10basetom