/** * Constructor. * * @param Query|QueryBuilder $query * A Doctrine ORM query or query builder. * @param boolean $fetchJoinCollection * Whether the query joins a collection (true by default). * @param boolean $cache * Use result cache (true by default). * @param boolean $count * Execute count query (true by default). */ public function __construct($query, $fetchJoinCollection = true, $cached = true, $count = true) { if ($count) { $countQuery = clone $query; $countQuery = $countQuery->select('count(e) as c')->setFirstResult(0)->setMaxResults(1)->getQuery(); $this->countQuery = $countQuery; } $q = $query; if ($cached) { $this->cache_prefix = ''; if ($query instanceof QueryBuilder) { $q = $query->getQuery(); $entities = $query->getRootEntities(); if ($entities) { $entity = $entities[0]; $this->cache_prefix = strtolower(substr(strrchr($entity, '\\'), 1) ?: $entity) . '-'; } } $q->useQueryCache(true)->useResultCache(true, 3600, $this->cache_prefix . md5($q->getDQL())); } parent::__construct($q, $fetchJoinCollection); }