/**
  * 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'));
     }
 }
 /**
  * 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);
 }