/** * Constructor * * @param FilterContainer $filters Filters */ public function __construct(FilterContainer $filters) { parent::__construct('filter'); foreach ($filters->all() as $key => $filter) { $this->add(array('name' => $key, 'type' => 'Text')); } }
public function testHas() { $container = new FilterContainer(); $container->add('foo', 'f.bar'); $this->assertTrue($container->has('foo')); $this->assertFalse($container->has('bar')); }
/** * Build where clause * * @param FilterContainer $filters Available filters * @param string $value Value * @param string $field Field name * * @return void */ protected function buildWhere(FilterContainer $filters, $value, $field = null) { $where = ''; foreach ($filters->all() as $key => $filter) { if (null !== $field && $field != $filter['field']) { continue; } if (null === $field) { $key .= '_'; } switch ($filter['type']) { case Paginator::FILTER_TYPE_STARTS_WITH: $comparisonOperator = 'LIKE'; $this->qb->setParameter($key, $value . '%'); break; case Paginator::FILTER_TYPE_ENDS_WITH: $comparisonOperator = 'LIKE'; $this->qb->setParameter($key, '%' . $value); break; case Paginator::FILTER_TYPE_CONTAINS: $comparisonOperator = 'LIKE'; $this->qb->setParameter($key, '%' . $value . '%'); break; case Paginator::FILTER_TYPE_EQUALS: // no break // no break default: $comparisonOperator = '='; $this->qb->setParameter($key, $value); break; } $where .= ' OR ' . $filter['field'] . ' ' . $comparisonOperator . ' :' . $key; } return substr($where, 4); }
/** * Add a filter to the filter container * * @param string $key Key * @param string $field Field * @param string $type Filter type * * @return Paginator */ public function addFilter($key, $field, $type = null) { $this->filters->add($key, $field, $type); return $this; }