symfony2/doctor: как использовать ResultSetMapping со счетчиком

У меня есть таблица архива (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" 
    } 
}

Есть идеи? Благодарность


person user3174311    schedule 14.05.2015    source источник
comment
вы проверили запрос в mysql? это работает, как ожидалось?   -  person Nawfal Serrar    schedule 15.05.2015
comment
да, если я выполняю его в командной строке, он работает, как и ожидалось.   -  person user3174311    schedule 15.05.2015


Ответы (1)


Вы указали псевдоним таблицы как «dh», но указали псевдоним как «d» при создании ResultSetMapping.

person Tom Cleaveland    schedule 30.03.2018