QueryBuilder.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\DB;
  7. /**
  8. * Class QueryBuilder
  9. */
  10. class QueryBuilder
  11. {
  12. /**
  13. * Select object
  14. *
  15. * @var \Magento\Framework\DB\Select
  16. */
  17. protected $select;
  18. /**
  19. * @var \Magento\Framework\Api\CriteriaInterface
  20. */
  21. protected $criteria;
  22. /**
  23. * Resource instance
  24. *
  25. * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb
  26. */
  27. protected $resource;
  28. /**
  29. * @var \Magento\Framework\DB\MapperFactory
  30. */
  31. protected $mapperFactory;
  32. /**
  33. * @var \Magento\Framework\DB\QueryFactory
  34. */
  35. protected $queryFactory;
  36. /**
  37. * @param \Magento\Framework\DB\MapperFactory $mapperFactory
  38. * @param \Magento\Framework\DB\QueryFactory $queryFactory
  39. */
  40. public function __construct(
  41. \Magento\Framework\DB\MapperFactory $mapperFactory,
  42. \Magento\Framework\DB\QueryFactory $queryFactory
  43. ) {
  44. $this->mapperFactory = $mapperFactory;
  45. $this->queryFactory = $queryFactory;
  46. }
  47. /**
  48. * Set source Criteria
  49. *
  50. * @param \Magento\Framework\Api\CriteriaInterface $criteria
  51. * @return void
  52. */
  53. public function setCriteria(\Magento\Framework\Api\CriteriaInterface $criteria)
  54. {
  55. $this->criteria = $criteria;
  56. }
  57. /**
  58. * Set Resource
  59. *
  60. * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
  61. * @return void
  62. */
  63. public function setResource(\Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource)
  64. {
  65. $this->resource = $resource;
  66. }
  67. /**
  68. * @return \Magento\Framework\DB\QueryInterface
  69. * @throws \Magento\Framework\Exception\LocalizedException
  70. */
  71. public function create()
  72. {
  73. $mapper = $this->criteria->getMapperInterfaceName();
  74. $mapperInstance = $this->mapperFactory->create($mapper);
  75. $select = $mapperInstance->map($this->criteria);
  76. $query = $this->queryFactory->create(
  77. \Magento\Framework\DB\Query::class,
  78. [
  79. 'select' => $select,
  80. 'criteria' => $this->criteria,
  81. 'resource' => $this->resource
  82. ]
  83. );
  84. return $query;
  85. }
  86. }