Import statement
use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory as ProductCollectionFactory;
|
Constructor
/**
* @var ProductCollectionFactory
*/
private $productCollectionFactory;
/**
* @param ProductCollectionFactory $productCollectionFactory
*/
public function __construct(
ProductCollectionFactory $productCollectionFactory
) {
$this->productCollectionFactory = $productCollectionFactory;
}
|
Product Types
\Magento\Catalog\Model\Product\Type::TYPE_SIMPLE
\Magento\Catalog\Model\Product\Type::TYPE_BUNDLE
\Magento\Catalog\Model\Product\Type::TYPE_VIRTUAL
\Magento\Downloadable\Model\Product\Type::TYPE_DOWNLOADABLE
\Magento\ConfigurableProduct\Model\Product\Type\Configurable::TYPE_CODE
\Magento\GroupedProduct\Model\Product\Type\Grouped::TYPE_CODE
|
Visibility filter
/**
* @var \Magento\Catalog\Model\Product\Visibility
*/
protected $productVisibility;
public function __construct(
\Magento\Catalog\Model\Product\Visibility $productVisibility,
) {
$this->productVisibility = $productVisibility;
}
[...]
$collection->setVisibility($this->productVisibility->getVisibleInSiteIds());
[...]
|
Filters
// Is Equal To
$collection->addAttributeToFilter('status', ['eq' => 1]);
// Is Not Equal To
$collection->addAttributeToFilter('visibility', ['neq' => 1]);
// Greater Than
$collection->addAttributeToFilter('price', ['gt' => 3]);
// Less Than
$collection->addAttributeToFilter('price', ['lt' => 3]);
// Greater Than or Equal To
$collection->addAttributeToFilter('price', ['gteq' => 4]);
// Less Than or Equal To
$collection->addAttributeToFilter('price', ['lteq' => 4]);
// Contains – with % wildcards
$collection->addAttributeToFilter('sku', ['like' => 'DVD%']);
// Does Not Contain – with % wildcards
$collection->addAttributeToFilter('sku', ['nlike' => 'ABC%']);
// In Array
$collection->addAttributeToFilter('entity_id', ['in' => [1,3,12]]);
// Not In Array
$collection->addAttributeToFilter('entity_id', ['nin' => [1,2,12]]);
// Is NULL
$collection->addAttributeToFilter('description', 'null');
$collection->addAttributeToFilter('description', ['null' => true]);
// Is Not NULL
$collection->addAttributeToFilter('description', 'notnull');
$collection->addAttributeToFilter('description', ['notnull' => true]);
|
Add Price Data
$collection->addPriceData();
|
Simple filter
$collection->addAttributeToFilter('type_id', $typeFilter);
|
More complex filter
$collection->addAttributeToFilter(
'status',
['in' => 'processing']
);
|
Or filter
// Or
$collection->addAttributeToFilter([
[
'attribute' => 'download_link',
'null' => true,
],
[
'attribute' => 'download_link',
'eq' => '',
],
]);
|
In Stock Filter
/**
* @var \Magento\CatalogInventory\Helper\Stock
*/
protected $stockHelper;
public function __construct(
\Magento\CatalogInventory\Helper\Stock $stockHelper
) {
$this->stockHelper = $stockHelper;
}
[...]
$this->stockFilter->addInStockFilterToCollection($collection);
[...]
|
Get Price Data
$collection->getMaxPrice();
$collection->getMinPrice();
$collection->getPriceStandardDeviation();
$collection->getPricesCount();
|
|
|
Create
$collection = $this->productCollectionFactory->create();
|
Filter by Product ID
$collection->addIdFilter($productId);
|
Filter by Store ID
$collection->addStoreFilter($storeId);
|
Select Attribute
$collection->addAttributeToSelect($attributeCode);
|
Get first item
return $collection->getFirstItem();
|
Get raw attribute value
return $collection->getFirstItem()->getData($attributeCode);
|
Status Filter
/**
* @var Magento\Catalog\Model\Product\Attribute\Source\Status
*/
protected $productStatus;
public function __construct(
\Magento\Catalog\Model\Product\Attribute\Source\Status $productStatus
) {
$this->productStatus = $productStatus;
}
[...]
$collection->addAttributeToFilter(
'status',
['in' => $this->productStatus->getVisibleStatusIds()
]);
[...]
|
Category Filter
$collection->addCategoryFilter($category);
|
Return only IDs
return $collection->getAllIds();
|
Debug Query
echo (string) $collection->getSelect();
$collection->printLogQuery(true);
|
Add Media
$collection->addMediaGalleryData();
|
Add Tier Price Data
$collection->addTierPriceData();
$collection->addTierPriceDataByGroupId($customerGroupId);
|
Add Category IDs
$collection->addCategoryIds();
|
Add Website Names
$collection->addWebsiteNamesToResult();
|
Join Stock Qty to collection
$collection->joinField(
'qty',
'cataloginventory_stock_item',
'qty',
'product_id=entity_id',
'{{table}}.stock_id=1',
'left'
);
|
Generic Collection
// Sort Collection
// Order by Attribute Ascending
$collection->setOrder('price', 'ASC');
// Order by Attribute Descending
$collection->setOrder('name', 'DESC');
// Random Order
$collection->setOrder('rand()');
// Limit Collection
$collection->setPageSize(10);
$collection->setCurPage(1);
// Count Results
$collection->count();
|
Add URL data
$collection->addUrlRewrite($categoryId);
|
Add Tax Percents
$collection->addTaxPercents();
|
Add Options
$collection->addOptionsToResult();
|
Add Sort
$collection->addAttributeToSort('name', 'DESC');
|
|
Created By
Metadata
Comments
No comments yet. Add yours below!
Add a Comment
Related Cheat Sheets
More Cheat Sheets by DominicXigen