【发布时间】:2015-04-24 10:34:42
【问题描述】:
我正在使用学说 2.4 进行 symfony 2.5 项目。
我想用缓存 id 和缓存时间来缓存查询结果,所以我可以在需要时通过管理员删除缓存结果。
我可以使用“createQueryBuilder()”选项缓存查询结果。
例子:
$this->createQueryBuilder('some_table')
->select('some_table')
->where('some_table.deleted_date IS NULL')
->getQuery()
->useResultCache(true)
->setResultCacheLifetime(120) //Query Cache lifetime
->setResultCacheId($queryCacheId) //Query Cache Id
->getResult();
但我找不到类似的方法来查找“findOneBy()”选项的查询结果。
例子:
$this->findOneBy(array('some_field'=>$some_value));
我正在寻找一些合适的解决方案,非常感谢任何帮助。
【问题讨论】:
-
groups.google.com/d/msg/doctrine-user/RIeH8ZkKyEY/HnR7h2p0lCQJ 正如 Ocramius 所说,如果您想利用缓存操作,您需要将此方法覆盖到 repo 中。
-
感谢您的回复。让我试试看,如果需要,我会问你更多。
-
这就是我如何覆盖存储库类中的“findOneBy”函数 public function findOneBy(array $criteria_array) { $query = $this->createQueryBuilder('b')->select('b') ; foreach($criteria_array as $fieldName=>$criteria) { $query->andWhere("b.$fieldName = :$fieldName"); $query->setParameter("$fieldName", $criteria);返回 $query->getQuery() ->useResultCache(true) ->setResultCacheLifetime(120) ->setResultCacheId($queryCacheId) ->getResult(); } 请检查并纠正我。每当我需要缓存结果时,是否需要覆盖所有存储库中的“find*”功能?
-
是的,你需要覆盖你需要的每一个函数。我相信 Ocramius 的回答,因为他是 Doctrine2 开发者之一;)
-
明白你的意思。感谢您的帮助:)
标签: php symfony caching doctrine-orm