|
@@ -11,6 +11,7 @@
|
|
|
|
|
|
namespace Sonata\DoctrineORMAdminBundle\Filter;
|
|
|
|
|
|
+use Doctrine\Common\Collections\Collection;
|
|
|
use Doctrine\ORM\Mapping\ClassMetadataInfo;
|
|
|
use Sonata\AdminBundle\Form\Type\EqualType;
|
|
|
|
|
@@ -29,36 +30,38 @@ class ModelFilter extends Filter
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- if (is_array($data['value'])) {
|
|
|
+ if ($data['value'] instanceof Collection) {
|
|
|
$this->handleMultiple($queryBuilder, $alias, $field, $data);
|
|
|
} else {
|
|
|
- $this->handleScalar($queryBuilder, $alias, $field, $data);
|
|
|
+ $this->handleModel($queryBuilder, $alias, $field, $data);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
protected function handleMultiple($queryBuilder, $alias, $field, $data)
|
|
|
{
|
|
|
- if (count($data['value']) == 0) {
|
|
|
+ if ($data['value']->count() == 0) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (isset($data['type']) && $data['type'] == EqualType::TYPE_IS_NOT_EQUAL) {
|
|
|
- $this->applyWhere($queryBuilder, $queryBuilder->expr()->notIn(sprintf('%s.%s', $alias, $field), $data['value']));
|
|
|
+ $this->applyWhere($queryBuilder, $queryBuilder->expr()->notIn($alias, ':'.$this->getName()));
|
|
|
} else {
|
|
|
- $this->applyWhere($queryBuilder, $queryBuilder->expr()->in(sprintf('%s.%s', $alias, $field), $data['value']));
|
|
|
+ $this->applyWhere($queryBuilder, $queryBuilder->expr()->in($alias, ':'.$this->getName()));
|
|
|
}
|
|
|
+
|
|
|
+ $queryBuilder->setParameter($this->getName(), $data['value']->toArray());
|
|
|
}
|
|
|
|
|
|
- protected function handleScalar($queryBuilder, $alias, $field, $data)
|
|
|
+ protected function handleModel($queryBuilder, $alias, $field, $data)
|
|
|
{
|
|
|
if (empty($data['value'])) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (isset($data['type']) && $data['type'] == EqualType::TYPE_IS_NOT_EQUAL) {
|
|
|
- $this->applyWhere($queryBuilder, sprintf('%s.%s != :%s', $alias, $field, $this->getName()));
|
|
|
+ $this->applyWhere($queryBuilder, sprintf('%s != :%s', $alias, $this->getName()));
|
|
|
} else {
|
|
|
- $this->applyWhere($queryBuilder, sprintf('%s.%s = :%s', $alias, $field, $this->getName()));
|
|
|
+ $this->applyWhere($queryBuilder, sprintf('%s = :%s', $alias, $this->getName()));
|
|
|
}
|
|
|
|
|
|
$queryBuilder->setParameter($this->getName(), $data['value']);
|