2016-07-18 18 views
1

Ich habe versucht, alle Produkte mit geeigneten SKUs in Magento 2.Filter Productcollection von sku

zu bekommen, was ich tat:

$currentSku = $_product->getSku(); 

$currentSku = substr($currentSku, 0, 3); 

$objectManager = \Magento\Framework\App\ObjectManager::getInstance(); 
/** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $productCollection */ 
$productCollection = $objectManager->create('Magento\Catalog\Model\ResourceModel\Product\Collection'); 
$productCollection->addFieldToFilter('sku', array('like' => ''.$currentSku.' %')); 
/** Apply filters here */ 
$productCollection->load(); 

Die Kollektion ist immer leer, aber es gibt geeignete Produkte.

Ich habe versucht, die Sammlung nach Namen zu filtern, und das hat funktioniert.

+0

$ productCollection-> addFieldToFilter ('sku', array ('wie' => '%') '$ currentSku..'); Dein '' 'wird richtig einrasten. versuch array ('like' => ''. $ currentSku. '%')); – GoatHater

+0

Danke, aber ich denke, es hat schon vorher funktioniert, ich bin einfach nicht in der Lage, einige Informationen auszugeben. Ich habe foreach versucht ($ collection als $ item) {$ item-> getName(); } aber ohne Ergebnis. –

+0

$ productCollection = Mage :: getModel ('catalog/product') -> GetCollection() -> addAttributeToSelect (Mage :: getSingleton ('Katalog/config') -> getProductAttributes()) -> addAttributeToFilter ('sku' , array ('like' => $ skuPart. '%')); – GoatHater

Antwort

0

Es gibt einen Platz nach Ihrer SKU. es verändern

$productCollection->addFieldToFilter('sku', array('like' => ''.$currentSku.'%')); 
0

Versuchen,

public function __construct(
     \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory, 
     .... 
    ) { 
     $this->_productCollectionFactory = $productCollectionFactory; 
     ... 
    } 

    public function getProducts($currentSku) 
    { 
     /** @var $collection \Magento\Catalog\Model\ResourceModel\Product\Collection */ 
     $collection = $this->_productCollectionFactory->create() 
        ->addAttributeToSelect('*') 
        ->addAttributeToFilter('status', array('eq' => 1)) 
        ->addAttributeToFilter('sku', array('like' => $currentSku.'%')) 
        ->addStoreFilter() 
        ->load(); 
     return $collection; 
    }