55use Doctrine \Common \Persistence \ObjectManager ;
66use Doctrine \ORM \Internal \Hydration \IterableResult ;
77use Doctrine \ORM \Query ;
8+ use Doctrine \ORM \QueryBuilder ;
89use 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