我正在将Memcache绑定到Doctrine,看起来我必须在每个查询中显式地使用
useResultCache
。是否可以将其默认设置为true
,并具有在不需要时使用useResultCache(false)
的能力?useResultCache(true)
,并在所有地方使用它,而不是使用原生函数。<?php
class CachedEntityManager implements EntityManagerInterface {
private $proxiedManager;
public function __construct(EntityManagerInterface $proxiedManager) {
$this->proxiedManager = $proxiedManager;
}
public function createQuery($dql = '') {
$query = $this->proxiedManager->createQuery($dql);
$query->useResultCache(true);
}
[... proxy all the calls forth to proxiedManager ...]
}
b) [不太好,但更短] 扩展EntityManager类并覆盖createQuery方法。请记住,这通常不是一个好习惯,您绝对不应该再在该类中编写任何内容,而应重构为a):<?php
class CachedEntityManager extends EntityManager {
public function createQuery($dql = '') {
$query = parent::createQuery($dql);
$query->useResultCache(true);
}
}
\Doctrine\ORM\AbstractQuery
中将$_useResultCache
的默认值设置为TRUE
来稍微修改Doctrine核心。这将使所有查询默认使用resultCacheDriver,并且您可以轻松地关闭单个查询的缓存,使用$query->useResultCache(FALSE)
即可。