コード例 #1
0
 /**
  * @param QueryBuilder $qb
  * @return integer|null
  * @throws \Exception
  */
 private function applyFilterAndCount(QueryBuilder $qb)
 {
     if (null === $this->request->getSearchValue() && !$this->table->getHasColumnFilter()) {
         return null;
     }
     $filter = [];
     foreach ($this->table->getColumns() as $column) {
         if ($column instanceof EntitiesCountColumn || true === $column->getOptions()['unbound']) {
             continue;
         }
         $field = $this->getPrefixedField($column);
         if (false !== $column->getOptions()['filter'] || true === $column->getOptions()['filter_empty']) {
             $value = $this->request->getSearchValue($column->getName());
             $empty = null;
             if (true === $column->getOptions()['filter_empty']) {
                 $empty = $this->extractEmptyFilterFromValue($value);
             }
             if (null !== $value || null !== $empty) {
                 $this->applyColumnFilter($column, $value, $qb, $field, $empty);
                 continue;
             }
         }
         $filter[] = $field;
     }
     if (null !== $this->request->getSearchValue()) {
         $where = '(' . join(' like :filter OR ', $filter) . ' like :filter)';
         $qb->andWhere($where);
         $qb->setParameter('filter', '%' . $this->request->getSearchValue() . '%');
     }
     return $qb->getQuery()->getSingleScalarResult();
 }