Как получить количество в Doctrine orm?
На основе ранее созданного DQL
Или другой способ, главное что бы это было экономически выгодно.
public function search()
{
$q = $this->request->mixed('q', '');
$offset = $this->request->mixed('offset', 0);
$count = $this->request->mixed('count', 10);
$category_id = (int)$this->request->mixed('category_id', 0);
$sort = $this->request->mixed('sort', "ASC");
$dig = 'dig';
$fields = [
"$dig.name",
"$dig.image",
"$dig.postCode",
"$dig.phone",
"$dig.latitude",
"$dig.longitude",
"$dig.home",
"$dig.site",
"$dig.schedule",
"$dig.category",
];
$qb = $this->em->getRepository(Digest::class)
->createQueryBuilder($dig);
// join
if ($category_id > 0)
$qb = $qb->innerJoin("$dig.category", "cat", Expr\Join::WITH, 'cat.parent = :category_id')
->setParameter('category_id', $category_id);
// where
$qb = $qb->where("$dig.name like :name")
->orWhere("$dig.home like :home")
->setParameter("name", "%$q%")
->setParameter("home", "%$q%");
// sort
$qb = $qb->orderBy("$dig.id", $sort)
->groupBy("$dig.id");
// count
/** @var $qb QueryBuilder $total */
//$dql = $qb->select("Count($dig.name)")->getDQL();
$total = 0; // Сюда я хочу записать количество, входящее в условие запроса
// далее я выставляю лимиты, офсеты
// limit, offset
$qb = $qb->setMaxResults($count)
->setFirstResult($offset);
/** @var QueryBuilder $qb */
// die($qb->getDQL());
$query = $qb->getQuery();
$items = $query->getArrayResult();
$data = new ResponseSchema();
$data->setCount(count($total));
$data->setItems($items);
$json = $this->serializer->serialize($data, 'json', ['attributes' => [
'count',
'items' => [
'name',
'image',
'postCode',
'phone',
'latitude',
'longitude',
'home',
'site',
'schedule',
]
]]);
$this->response->jsonSend($json);
}