public function findByAdapter(array $filters = array(), array $order_by = array(), $q = '', $key_operator = '') { $fields = array_keys($this->getClassMetadata()->reflFields); $qb = $this->createQueryBuilder('c'); $operatorsLike = Utility::operatorsLike(); $operatorsNotLike = Utility::operatorsNotLike(); $sqlOperators = array_merge($operatorsLike, $operatorsNotLike); $operatorsLikeKey = array_keys($operatorsLike); $operatorsNotLikeKey = array_keys($operatorsNotLike); $qLike = false; $qNotLike = false; $qLikeValue = ''; foreach ($sqlOperators as $key => $value) { if ($key === $key_operator) { if (in_array($key, $operatorsNotLikeKey)) { $qNotLike = true; } else { $qLike = true; } $qLikeValue = $value; } } $ORs = array(); foreach ($fields as $field) { if (isset($filters[$field])) { if (!empty($filters[$field])) { $qb->andWhere('c.' . $field . '=' . $filters[$field]); } if ($qLike && $qLikeValue) { if (empty($filters[$field])) { $ORs[] = $qb->expr()->like('c.' . $field, $qb->expr()->literal(sprintf($qLikeValue, $q))); } } if ($qNotLike && $qLikeValue) { $ORs[] = $qb->expr()->notLike('c.' . $field, $qb->expr()->literal(sprintf($qLikeValue, $q))); } } if (isset($order_by[$field])) { $sortDir = $order_by[$field] === 'ASC' ? 'ASC' : 'DESC'; $qb->addOrderBy('c.' . $field, $sortDir); } } $orx = $qb->expr()->orX(); foreach ($ORs as $or) { $orx->add($or); } $qb->andWhere($orx); $adapter = new DoctrineORMAdapter($qb); return $adapter; }