У меня есть таблица архива (id, title, author) и таблица download_history (id, id_archive, дата), чтобы отслеживать количество загрузок для каждого архива. Теперь я хочу создать отчет для просмотра наиболее загружаемых архивов за неделю. Это довольно просто сделать в SQL, но с доктриной все сложнее, вот что я сделал до сих пор:
public function getTopDownloadsLastXDays($limit=100, $days=7)
{
$rsm = new ResultSetMapping();
$rsm->addEntityResult('DownloadHistory', 'd');
$rsm->addMetaResult('d', 'archive', 'archive');
$rsm->addScalarResult('tot', 'tot');
$rsm->addJoinedEntityResult('Archive', 'a', 'd', 'archive');
$rsm->addFieldResult('a', 'author', 'author');
$rsm->addFieldResult('a', 'title', 'title');
$sql = "SELECT
DISTINCT(dh.archive_id),
COUNT(*) as tot,
a.author,
a.title
FROM
download_history dh
INNER JOIN
archive a
ON
dh.archive_id = a.id
WHERE
dh.date >= DATE(NOW()) - INTERVAL :days DAY
GROUP BY
dh.archive_id
LIMIT :limit";
$em = $this->getEntityManager();
$query = $em->createNativeQuery($sql, $rsm);
$query->setParameters(array(
':days' => $days,
':limit' => $limit,
));
$results = $query->getResult();
return $results;
}
Сущности существуют и работают нормально. Я следовал третьему примеру здесь: http://doctrine-orm.readthedocs.org/en/latest/reference/native-sql.html#examples. Это мой результат:
array(1) {
[-1]=> array(1) {
["tot"]=> string(1) "1"
}
}
Есть идеи? Благодарность