@@ 114-144 (lines=31) @@ | ||
111 | /** |
|
112 | * {@inheritdoc} |
|
113 | */ |
|
114 | public function query(Query $query): \Traversable |
|
115 | { |
|
116 | $sourceAlias = 'a'; |
|
117 | $queryBuilder = $this->entityManager->getRepository($query->getClassFqn())->createQueryBuilder($sourceAlias); |
|
118 | $visitor = new ExpressionVisitor( |
|
119 | $queryBuilder->expr(), |
|
120 | $sourceAlias |
|
121 | ); |
|
122 | ||
123 | if ($query->hasExpression()) { |
|
124 | $expr = $visitor->dispatch($query->getExpression()); |
|
125 | $queryBuilder->where($expr); |
|
126 | $queryBuilder->setParameters($visitor->getParameters()); |
|
127 | } |
|
128 | ||
129 | foreach ($query->getOrderings() as $field => $order) { |
|
130 | $queryBuilder->addOrderBy($sourceAlias . '.' . $field, $order); |
|
131 | } |
|
132 | ||
133 | if (null !== $query->getFirstResult()) { |
|
134 | $queryBuilder->setFirstResult($query->getFirstResult()); |
|
135 | } |
|
136 | ||
137 | if (null !== $query->getMaxResults()) { |
|
138 | $queryBuilder->setMaxResults($query->getMaxResults()); |
|
139 | } |
|
140 | ||
141 | return new ArrayCollection( |
|
142 | $queryBuilder->getQuery()->execute() |
|
143 | ); |
|
144 | } |
|
145 | ||
146 | /** |
|
147 | * Return the entity manager instance (for use in events). |
@@ 119-148 (lines=30) @@ | ||
116 | /** |
|
117 | * {@inheritdoc} |
|
118 | */ |
|
119 | public function query(Query $query): \Traversable |
|
120 | { |
|
121 | $sourceAlias = 'a'; |
|
122 | $queryBuilder = $this->documentManager->getRepository($query->getClassFqn())->createQueryBuilder($sourceAlias); |
|
123 | ||
124 | if ($query->hasExpression()) { |
|
125 | $visitor = new ExpressionVisitor( |
|
126 | $queryBuilder, |
|
127 | $sourceAlias |
|
128 | ); |
|
129 | ||
130 | $visitor->dispatch($query->getExpression()); |
|
131 | } |
|
132 | ||
133 | $orderBy = $queryBuilder->orderBy(); |
|
134 | foreach ($query->getOrderings() as $field => $order) { |
|
135 | $order = strtolower($order); |
|
136 | $orderBy->{$order}()->field($sourceAlias . '.' . $field); |
|
137 | } |
|
138 | ||
139 | if (null !== $query->getFirstResult()) { |
|
140 | $queryBuilder->setFirstResult($query->getFirstResult()); |
|
141 | } |
|
142 | ||
143 | if (null !== $query->getMaxResults()) { |
|
144 | $queryBuilder->setMaxResults($query->getMaxResults()); |
|
145 | } |
|
146 | ||
147 | return $queryBuilder->getQuery()->execute(); |
|
148 | } |
|
149 | ||
150 | /** |
|
151 | * Return the document mangaer instance (for use in events). |