فهرست منبع

Fix ModelFilter to use converted values.

Romain Geissler 13 سال پیش
والد
کامیت
e35b54a2bb
1فایلهای تغییر یافته به همراه11 افزوده شده و 8 حذف شده
  1. 11 8
      Filter/ModelFilter.php

+ 11 - 8
Filter/ModelFilter.php

@@ -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']);