Есть некий запрос на получение данных (запрос сокращен для удобства):
$qb = $this->entityManager->createQueryBuilder()
->select(['record', 'type'])
->from(Record::class, 'record')
->leftJoin('record.type', 'type');
$criteria = Criteria::create();
$criteria->andWhere(Criteria::expr()->eq('type.alias', 'news'));
$qb->addCriteria($criteria);
$query = $qb->getQuery();
$query->getScalarResult();
Мне нужно проделать пожалуй тоже самое, только получить кол-во записей скалярным числом. Понятно, что вариант с count($query->getScalarResult()) не подходит по оптимизации.
Подскажите, как можно подсчитать кол-во записей, учитывая join?
Вам необходимо переписать Ваш DQL запрос: нужно определить по какому полю будем считать количество записей - предполагаю, что в Вашем случае, Вы хотите подсчитать к-во record с определенным type.
Тогда DQL будет выглядеть приблизительно так:
$qb = $this->entityManager->createQueryBuilder()
->select('COUNT(record.id)')
->from(Record::class, 'record')
->leftJoin('record.type', 'type')
->groupBy('type.alias');
$countRes = $qb->getQuery()->getScalarResult();
Также, если Вам важно именно оптимизировать этот участок, можно использовать NativeQuery
(http://docs.doctrine-project.org/en/latest/reference/native-sql.html) - через него будет эффективнее, но придется пожертвовать тем, что SQL будете писать в терминах хранилища данных, а не ООП-модели приложения. Какой вариант Вам предпочтительнее, выбирайте из особенностей приложения.
Лично я бы вынес метод получения кол-ва записей по тэгу в отдельный метод репозитория (что то вроде RecordsRepository#countByTag(TagInterface $tag) : int
), и инкапсулировал бы эту логику внутри этого метода, чтобы она не растекалась по приложению.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть сайт на котором все страницы сделаны через SP Page Builder, нужно вывести на главной странице модуль с карточками этих страницДля материалов...
Как проверить, что на сервер пришел запрос от конкретной joomla, например, если запрос от joomla1 то выполнить код1, если нет - что-то другое?
В Yii2 ActiveRecord у модели есть статичный метод deleteAllКак сделать удаление с джоином? Например я хочу вот так сделать: