Skip to content

Commit fe07221

Browse files
glenscddeboer
authored andcommitted
doctrine-reader: add querybuilder support (#12)
* doctrine-reader: add querybuilder support * doctrinereader: make getQueryBuilder non-public
1 parent 0044de4 commit fe07221

1 file changed

Lines changed: 25 additions & 11 deletions

File tree

src/DoctrineReader.php

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Doctrine\Common\Persistence\ObjectManager;
66
use Doctrine\ORM\Internal\Hydration\IterableResult;
77
use Doctrine\ORM\Query;
8+
use Doctrine\ORM\QueryBuilder;
89
use Port\Reader\CountableReader;
910

1011
/**
@@ -29,23 +30,43 @@ class DoctrineReader implements CountableReader
2930
*/
3031
protected $iterableResult;
3132

33+
/** @var QueryBuilder */
34+
protected $queryBuilder;
35+
3236
/**
3337
* @param ObjectManager $objectManager
34-
* @param string $objectName e.g. YourBundle:YourEntity
38+
* @param string $objectName e.g. YourBundle:YourEntity
3539
*/
3640
public function __construct(ObjectManager $objectManager, $objectName)
3741
{
3842
$this->objectManager = $objectManager;
3943
$this->objectName = $objectName;
4044
}
4145

46+
public function setQueryBuilder(QueryBuilder $queryBuilder)
47+
{
48+
$this->queryBuilder = $queryBuilder;
49+
50+
return $this;
51+
}
52+
53+
protected function getQueryBuilder()
54+
{
55+
if ($this->queryBuilder === null) {
56+
$this->queryBuilder = $this->objectManager->createQueryBuilder()
57+
->from($this->objectName, 'o');
58+
}
59+
60+
return clone $this->queryBuilder;
61+
}
62+
4263
/**
4364
* {@inheritdoc}
4465
*/
4566
public function getFields()
4667
{
4768
return $this->objectManager->getClassMetadata($this->objectName)
48-
->getFieldNames();
69+
->getFieldNames();
4970
}
5071

5172
/**
@@ -86,11 +107,7 @@ public function valid()
86107
public function rewind()
87108
{
88109
if (!$this->iterableResult) {
89-
90-
$query = $this->objectManager->createQueryBuilder()
91-
->select('o')
92-
->from($this->objectName, 'o')
93-
->getQuery();
110+
$query = $this->getQueryBuilder()->select('o')->getQuery();
94111

95112
$this->iterableResult = $query->iterate([], Query::HYDRATE_ARRAY);
96113
}
@@ -103,10 +120,7 @@ public function rewind()
103120
*/
104121
public function count()
105122
{
106-
$query = $this->objectManager->createQueryBuilder()
107-
->select('count(o)')
108-
->from($this->objectName, 'o')
109-
->getQuery();
123+
$query = $this->getQueryBuilder()->select('count(o)')->getQuery();
110124

111125
return $query->getSingleScalarResult();
112126
}

0 commit comments

Comments
 (0)