/** * @param ClassMetadata $targetEntity * @param string $targetEntityPropertyName * @return Query */ protected function getSubselectQuery(ClassMetadata $targetEntity, $targetEntityPropertyName) { $subselectQuery = new Query($targetEntity->getAssociationTargetClass($targetEntityPropertyName)); $propertyName = str_replace($targetEntityPropertyName . '.', '', $this->path); switch ($this->operator) { case '==': $subselectConstraint = $subselectQuery->equals($propertyName, $this->operand); break; case '!=': $subselectConstraint = $subselectQuery->logicalNot($subselectQuery->equals($propertyName, $this->operand)); break; case '<': $subselectConstraint = $subselectQuery->lessThan($propertyName, $this->operand); break; case '>': $subselectConstraint = $subselectQuery->greaterThan($propertyName, $this->operand); break; case '<=': $subselectConstraint = $subselectQuery->lessThanOrEqual($propertyName, $this->operand); break; case '>=': $subselectConstraint = $subselectQuery->greaterThanOrEqual($propertyName, $this->operand); break; case 'like': $subselectConstraint = $subselectQuery->like($propertyName, $this->operand); break; case 'in': $subselectConstraint = $subselectQuery->in($propertyName, $this->operand); break; } $subselectQuery->matching($subselectConstraint); return $subselectQuery; }