截至Doctrine2的新版本,我知道有Doctrine\ORM\Configuration#setHydrationCacheImpl()
传递诸如MemcacheCache等
但如何在容器中完成?
我使用了两个entity_manager:named"默认"和"其他"。
我首先尝试将hydration_cache定义为config.yml,如
doctrine:
orm:
default_entity_manager: default
...
entity_managers:
default:
...
metadata_cache_driver:
type: service
id: memcache_driver
...
hydration_cache_driver:
type: service
id: memcache_driver
...
other:
...
注意:memcache_driver
由我定义,instanceof Doctrine\Common\Cache\MemcacheCache
然后我得到了Unrecognized options "hydration_cache_driver" under "doctrine.orm.entity_managers.default"
。
我还尝试在AppKernel#buildContainer中直接调整容器, 但是没有将\ Doctrine \ ORM \ Configuration定义为服务的实例, 所以我无法检索配置实例。
欢迎任何建议。
编辑:
我确信从Doctrine 2.2.2开始重新实现了缓存水合物的功能。
http://www.doctrine-project.org/jira/browse/DDC-1766
对于其他简单服务,我可以通过覆盖整个定义(如
)轻松添加调用方法service1:
...
calls:
[method calls]
但是对于entity_manager,我不确定如何向它们添加方法调用。
所以我的问题换句话说,如何在不使用语义配置的情况下在较低级别配置orm?
答案 0 :(得分:1)
就我而言,由于几乎不使用水合缓存, 所以我决定在执行每个查询之前调用Query#setHydrationCacheProfile。
...
$query = $queryBuilder->getQuery();
$cache = $this->container->get('...'); //instanceof MemcacheCache
$query->setHydrationCacheProfile(new CacheProfile(null, null $cache));
$query->execute();
...
答案 1 :(得分:0)
没有这样的选项“hydration_cache_driver”,你应该使用“result_cache_driver”来实现这一点。
从Doctrine 2.1开始,Doctrine可以缓存查询结果,但是在水化后它不会缓存对象。
查看有关学说配置的文档:
http://symfony.com/doc/master/reference/configuration/doctrine.html