/** * @param QueryBuilder $queryBuilder * @param Criteria $criteria * @param string $alias */ protected function applyCriteria(QueryBuilder $queryBuilder, Criteria $criteria, string $alias) { $properties = array_merge($this->getClassMetadata()->getFieldNames(), $this->getClassMetadata()->getAssociationNames()); foreach ($criteria->all() as $property => $value) { if (!in_array($property, $properties)) { continue; } $name = $this->getPropertyName($property, $alias); if (null === $value) { $queryBuilder->andWhere($queryBuilder->expr()->isNull($name)); } elseif (is_array($value)) { $queryBuilder->andWhere($queryBuilder->expr()->in($name, $value)); } elseif ('' !== $value) { $parameter = str_replace('.', '_', $property); $queryBuilder->andWhere($queryBuilder->expr()->eq($name, ':' . $parameter))->setParameter($parameter, $value); } } }