protected function applySpecification(QueryBuilder $queryBuilder, $specification = null, $alias = null)
{
if (null === $specification) {
return;
}
if (!$specification instanceof QueryModifier && !$specification instanceof Filter) {
throw new \InvalidArgumentException(sprintf('Expected argument of type "%s" or "%s", "%s" given.', 'Happyr\\DoctrineSpecification\\Query\\QueryModifier', 'Happyr\\DoctrineSpecification\\Filter\\Filter', is_object($specification) ? get_class($specification) : gettype($specification)));
}
if ($specification instanceof QueryModifier) {
$specification->modify($queryBuilder, $alias ?: $this->getAlias());
}
if ($specification instanceof Filter && ($filter = (string) $specification->getFilter($queryBuilder, $alias ?: $this->getAlias()))) {
$queryBuilder->andWhere($filter);
}
}