public function getListByCriteria(ListCriteria $criteria)
{
$qb = $this->createQueryBuilder('ct');
$qb->andWhere('ct.is_active = :is_active')->setParameter('is_active', true);
foreach ($criteria->perametersOperators as $key => $operator) {
$qb->andWhere('ct.' . $key . ' = :' . $key)->setParameter($key, $criteria->{$key});
}
$list = new ListResult();
$countBuilder = clone $qb;
$list->count = (int) $countBuilder->select('COUNT(ct)')->getQuery()->getSingleScalarResult();
if ($criteria->length != 0) {
$qb->setMaxResults($criteria->length);
}
$metadata = $this->getClassMetadata();
foreach ($criteria->orderBy as $key => $order) {
if (array_key_exists($key, $metadata->columnNames)) {
$key = 'ct.' . $key;
}
$qb->orderBy($key, $order);
}
$list->items = $qb->getQuery()->getResult();
return $list;
}