vendor/pimcore/pimcore/models/DataObject/Listing/Dao.php line 65

Open in your IDE?
  1. <?php
  2. /**
  3. * Pimcore
  4. *
  5. * This source file is available under two different licenses:
  6. * - GNU General Public License version 3 (GPLv3)
  7. * - Pimcore Commercial License (PCL)
  8. * Full copyright and license information is available in
  9. * LICENSE.md which is distributed with this source code.
  10. *
  11. * @copyright Copyright (c) Pimcore GmbH (http://www.pimcore.org)
  12. * @license http://www.pimcore.org/license GPLv3 and PCL
  13. */
  14. namespace Pimcore\Model\DataObject\Listing;
  15. use Doctrine\DBAL\Query\QueryBuilder as DoctrineQueryBuilder;
  16. use Pimcore\Model;
  17. use Pimcore\Model\DataObject;
  18. use Pimcore\Model\Listing\Dao\QueryBuilderHelperTrait;
  19. /**
  20. * @internal
  21. *
  22. * @property \Pimcore\Model\DataObject\Listing $model
  23. */
  24. class Dao extends Model\Listing\Dao\AbstractDao
  25. {
  26. use QueryBuilderHelperTrait;
  27. /**
  28. * @return string
  29. */
  30. public function getTableName()
  31. {
  32. return 'objects';
  33. }
  34. /**
  35. * @param string|string[]|null $columns
  36. *
  37. * @return DoctrineQueryBuilder
  38. *
  39. * @throws \Exception
  40. */
  41. public function getQueryBuilder(...$columns): DoctrineQueryBuilder
  42. {
  43. $queryBuilder = $this->db->createQueryBuilder();
  44. $queryBuilder->select(...$columns)->from($this->getTableName());
  45. // apply joins
  46. $this->applyJoins($queryBuilder);
  47. $this->applyListingParametersToQueryBuilder($queryBuilder);
  48. return $queryBuilder;
  49. }
  50. /**
  51. * Loads a list of objects for the specicifies parameters, returns an array of DataObject\AbstractObject elements
  52. *
  53. * @return array
  54. */
  55. public function load()
  56. {
  57. // load id's
  58. $list = $this->loadIdList();
  59. $objects = [];
  60. foreach ($list as $o_id) {
  61. if ($object = DataObject::getById($o_id)) {
  62. $objects[] = $object;
  63. }
  64. }
  65. $this->model->setObjects($objects);
  66. return $objects;
  67. }
  68. /**
  69. * @return int
  70. */
  71. public function getTotalCount()
  72. {
  73. $queryBuilder = $this->getQueryBuilder();
  74. $this->prepareQueryBuilderForTotalCount($queryBuilder, $this->getTableName() . '.o_id');
  75. $totalCount = $this->db->fetchOne((string) $queryBuilder, $this->model->getConditionVariables(), $this->model->getConditionVariableTypes());
  76. return (int) $totalCount;
  77. }
  78. /**
  79. * @return int
  80. */
  81. public function getCount()
  82. {
  83. if ($this->model->isLoaded()) {
  84. return count($this->model->getObjects());
  85. } else {
  86. $idList = $this->loadIdList();
  87. return count($idList);
  88. }
  89. }
  90. /**
  91. * Loads a list of document ids for the specicifies parameters, returns an array of ids
  92. *
  93. * @return int[]
  94. */
  95. public function loadIdList()
  96. {
  97. $queryBuilder = $this->getQueryBuilder([sprintf('%s as o_id', $this->getTableName() . '.o_id'), sprintf('%s as o_type', $this->getTableName() . '.o_type')]);
  98. $objectIds = $this->db->fetchFirstColumn((string) $queryBuilder, $this->model->getConditionVariables(), $this->model->getConditionVariableTypes());
  99. return array_map('intval', $objectIds);
  100. }
  101. /**
  102. * @param DoctrineQueryBuilder $queryBuilder
  103. *
  104. * @return $this
  105. */
  106. protected function applyJoins(DoctrineQueryBuilder $queryBuilder)
  107. {
  108. return $this;
  109. }
  110. }