默认情况下,使Doctrine使用结果缓存

Flu*_*ffy 3 memcached caching doctrine

我将Memcache绑定到Doctrine,似乎我必须useResultCache明确地在每个查询中.是否有可能在true默认情况下使用它,并且能够useResultCache(false)不需要它?

Byr*_*ock 8

创建一个包装器类/函数,它明确地设置useResultCache(true)和使用它,而不是本机函数.


小智 5

我知道这个问题很老,但我会写出我想到的最佳答案。

1)抽象掉你对接口的依赖(即 - 使用依赖注入模式将 EntityManager 注入你的类中,该类创建查询并使用 EntityManagerInterface 代替)

现在,要么:

a) [更好,但更长] 为 EntityManagerInterface 创建一个新的与组合相关的实现,它将代理对原始 entityManager 的调用并将结果缓存标志设置为 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 ...]

}
Run Code Online (Sandbox Code Playgroud)

b) [不太好,但更短] 扩展 EntityManager 类并覆盖 createQuery。请记住,这通常不是一个好的做法,您绝对不应再在该类中编写任何内容,而是重构为 a) :

<?php
class CachedEntityManager extends EntityManager { 

public function createQuery($dql = '') {
    $query = parent::createQuery($dql);
    $query->useResultCache(true);   
}

}
Run Code Online (Sandbox Code Playgroud)