mapperFactory = $mapperFactory; $this->queryFactory = $queryFactory; } /** * Set source Criteria * * @param \Magento\Framework\Api\CriteriaInterface $criteria * @return void */ public function setCriteria(\Magento\Framework\Api\CriteriaInterface $criteria) { $this->criteria = $criteria; } /** * Set Resource * * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource * @return void */ public function setResource(\Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource) { $this->resource = $resource; } /** * @return \Magento\Framework\DB\QueryInterface * @throws \Magento\Framework\Exception\LocalizedException */ public function create() { $mapper = $this->criteria->getMapperInterfaceName(); $mapperInstance = $this->mapperFactory->create($mapper); $select = $mapperInstance->map($this->criteria); $query = $this->queryFactory->create( \Magento\Framework\DB\Query::class, [ 'select' => $select, 'criteria' => $this->criteria, 'resource' => $this->resource ] ); return $query; } }