public function findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
{
$queryBuilder = $this->createQueryBuilder('p')->select('p, COUNT(i)')->leftJoin('p.items', 'i')->groupBy('p.id');
$this->setCriteria($queryBuilder, $criteria);
if (!empty($orderBy)) {
foreach ($orderBy as $sort => $order) {
$queryBuilder->orderBy("p.{$sort}", $order);
}
}
$queryBuilder->setFirstResult($offset);
$queryBuilder->setMaxResults($limit);
$packages = array();
foreach ($queryBuilder->getQuery()->getResult() as $row) {
$package = $row[0];
$package->setItemsCount($row[1]);
$packages[] = $package;
}
return $packages;
}