| @@ 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). |
|