Skip to content

Instantly share code, notes, and snippets.

@0-Sony
Last active March 13, 2020 19:00
Show Gist options
  • Select an option

  • Save 0-Sony/b05eab5c3f71147750cc259b7c5dab52 to your computer and use it in GitHub Desktop.

Select an option

Save 0-Sony/b05eab5c3f71147750cc259b7c5dab52 to your computer and use it in GitHub Desktop.
Magento 2 : Example of using searchCriteriaBuiler
<?php
namespace MyNameSpace\Catalog\Block\Product
use Magento\Catalog\Model\ProductRepository;
use Magento\Framework\Api\FilterBuilder;
use Magento\Framework\Api\Search\FilterGroupBuilder;
use Magento\Framework\Api\SearchCriteriaBuilder;
use Magento\Framework\View\Element\Template;
class MyClass extends Template
{
/** @var \Magento\Framework\Registry */
protected $_coreRegistry;
/** @var ProductRepository */
private $_productRepository;
/** @var FilterBuilder */
private $_filterBuilder;
/** @var FilterGroupBuilder */
private $_filterGroupBuilder;
/** @var SearchCriteriaBuilder */
private $_searchCriteriaBuilder;
public function __construct(
\Magento\Catalog\Block\Product\Context $context,
array $data,
SearchCriteriaBuilder $searchCriteriaBuilder,
FilterBuilder $filterBuilder,
FilterGroupBuilder $filterGroupBuilder,
ProductRepository $productRepository
) {
parent::__construct($context, $data);
$this->_coreRegistry = $context->getRegistry();
$this->_productRepository = $productRepository;
$this->_filterBuilder = $filterBuilder;
$this->_filterGroupBuilder = $filterGroupBuilder;
$this->_searchCriteriaBuilder = $searchCriteriaBuilder;
}
/**
* Get Current Product
* @return \Magento\Catalog\Model\Product
*/
public function getProduct()
{
return $this->_coreRegistry->registry('product');
}
/**
* Get y own Product List
* @return \Magento\Catalog\Api\Data\ProductInterface[]
*/
public function getMyProducts()
{ /** @var \Magento\Catalog\Model\Product $product */
$product = $this->getProduct();
$customAttributeFilter = $this->_filterBuilder
->setField('my_custom_attribute')
->setValue($product->getData('my_custom_attribute'))
->setConditionType('eq')
->create();
$attributeSetFilter = $this->_filterBuilder
->setField('attribute_set_id')
->setValue($product->getAttributeSetId())
->setConditionType('eq')
->create();
$filterGroupContract = $this->_filterGroupBuilder
->addFilter($customAttributeFilter)
->create();
$filterGroupAttributeSet = $this->_filterGroupBuilder
->addFilter($attributeSetFilter)
->create();
$criteria = $this->_searchCriteriaBuilder
->setFilterGroups(array($customAttributeFilter , $filterGroupAttributeSet))
->create();
$productRepository = $this->_productRepository;
return $productRepository->getList($criteria)->getItems();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment