public function getListByCriteria(SlideshowItemCriteria $criteria)
{
$qb = $this->createQueryBuilder('i');
$qb->select('i, ii, p')->leftJoin('i.image', 'ii')->leftJoin('i.package', 'p');
if ($criteria->slideshow) {
$qb->andWhere('i.package ' . $criteria->perametersOperators['slideshow'] . ' :package')->setParameter('package', $criteria->slideshow);
unset($criteria->perametersOperators['slideshow']);
}
if ($criteria->type) {
if ($criteria->type == 'image' && $criteria->perametersOperators['type'] == '=') {
$qb->andWhere('i.videoUrl IS NULL');
} elseif ($criteria->type == 'video' && $criteria->perametersOperators['type'] == '=') {
$qb->andWhere('i.videoUrl IS NOT NULL');
}
unset($criteria->perametersOperators['type']);
}
foreach ($criteria->perametersOperators as $key => $operator) {
if ($criteria->{$key} !== null) {
$qb->andWhere('i.' . $key . ' ' . $operator . ' :' . $key)->setParameter($key, $criteria->{$key});
}
}
$metadata = $this->getClassMetadata();
foreach ($criteria->orderBy as $key => $order) {
if (array_key_exists($key, $metadata->columnNames)) {
$key = 'i.' . $key;
}
$qb->orderBy($key, $order);
}
$query = $qb->getQuery();
return $query;
}