doudai8083 2016-01-12 12:21
浏览 34

symfony2缓存查询结果

I would like to cache my query result because I do a lot of query but it change only every hour. As it is an application that will be used for so much people I would like to chache this results but the query field on debug symfony bar every show all the query. This is my code.

config file :

orm:
    auto_generate_proxy_classes: "%kernel.debug%"
    naming_strategy: doctrine.orm.naming_strategy.underscore
    auto_mapping: true
    default_entity_manager: default
    query_cache_driver: apc
    metadata_cache_driver: apc
    query_cache_driver: apc
    result_cache_driver: apc

    dql:
        datetime_functions:
            date:           Oro\ORM\Query\AST\Functions\SimpleFunction
            time:           Oro\ORM\Query\AST\Functions\SimpleFunction
            timestamp:      Oro\ORM\Query\AST\Functions\SimpleFunction
            convert_tz:     Oro\ORM\Query\AST\Functions\DateTime\ConvertTz
        numeric_functions:
            timestampdiff:  Oro\ORM\Query\AST\Functions\Numeric\TimestampDiff
            dayofyear:      Oro\ORM\Query\AST\Functions\SimpleFunction
            dayofmonth:     Oro\ORM\Query\AST\Functions\SimpleFunction
            dayofweek:      Oro\ORM\Query\AST\Functions\SimpleFunction
            week:           Oro\ORM\Query\AST\Functions\SimpleFunction
            day:            Oro\ORM\Query\AST\Functions\SimpleFunction
            hour:           Oro\ORM\Query\AST\Functions\SimpleFunction
            minute:         Oro\ORM\Query\AST\Functions\SimpleFunction
            month:          Oro\ORM\Query\AST\Functions\SimpleFunction
            quarter:        Oro\ORM\Query\AST\Functions\SimpleFunction
            second:         Oro\ORM\Query\AST\Functions\SimpleFunction
            year:           Oro\ORM\Query\AST\Functions\SimpleFunction
            sign:           Oro\ORM\Query\AST\Functions\Numeric\Sign
            pow:            Oro\ORM\Query\AST\Functions\Numeric\Pow
        string_functions:
            group_concat:   Oro\ORM\Query\AST\Functions\String\GroupConcat
            concat_ws:      Oro\ORM\Query\AST\Functions\String\ConcatWs
            cast:           Oro\ORM\Query\AST\Functions\Cast

And this is the query that I would like to cache :

public function answerBySiteWhereHour($voteIndicator,$site,$hour,$day=null){
    if($day==null){
      $day = new \DateTime();
    }

    $em = $this->getEntityManager();
    $site= $em->getRepository('AppBundle:Site')->findOneBySiteId($site);
    $repository = $em
        ->getRepository('AppBundle:Answer')
        ->createQueryBuilder('a')
        ->select('a as answer, COUNT(vote.id) as voteN')
        ->leftJoin('a.vote','vote', 'WITH','vote.voteIndicator= :voteIndicator AND DATE(vote.date) = DATE( :today) AND HOUR(vote.date) =  :hour')
        ->leftJoin('vote.site','site','WITH','site.id = :site')
        ->setParameter('site',$site->getId())
        ->groupBy('a')
        ->orderBy('a.id','ASC')
        ->setParameter('today', $day)
        ->setParameter('voteIndicator', $voteIndicator)
        ->setParameter('hour', $hour)
    ;
    $query = $repository->getQuery()
        ->useQueryCache(true)
        ->useResultCache(true,3600);

    return $query->getResult();
}

public function answerSatisfactionBySiteByHour($site, $day=null){
    $result = [];
    for($i=1; $i<=24; $i++){
        $result [$i] =array(1=>$this->answerBySiteWhereHour(1,$site,$i,$day),2=>$this->answerBySiteWhereHour(2,$site,$i,$day),3=>$this->answerBySiteWhereHour(3,$site,$i,$day));
    }
    return $result;
}

Thank you for the help, regards.

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥100 set_link_state
    • ¥15 虚幻5 UE美术毛发渲染
    • ¥15 CVRP 图论 物流运输优化
    • ¥15 Tableau online 嵌入ppt失败
    • ¥100 支付宝网页转账系统不识别账号
    • ¥15 基于单片机的靶位控制系统
    • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
    • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
    • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
    • ¥15 手机接入宽带网线,如何释放宽带全部速度