我有一个网站,用于我玩的视频游戏,并正在通过实施一些额外的缓存来改善网站的性能。我已经能够在自定义存储库函数上实现查询结果缓存,但是无法在任何地方找到解释如何在内置函数(findOneById等)中包含查询结果缓存的地方。我很感兴趣这样做,因为我的许多数据库查询都是从这些“本机”存储库函数执行的。
作为示例,我有一个具有以下属性的字符实体对象:id,name,race,class等。
此对象中的Race和class是对race和class的其他实体对象的引用。
当我加载一个字符进行显示时,我按名称获取字符(findOneByName),然后在我的模板中,我按$characterObject->getRace()->getName()
显示字符的种族/类。模板中的这些方法调用导致在我的Race / Class实体表上运行查询,通过id获取实体(我假设为findOneById)。
我试图在存储库中创建自己的findOneById函数,但在这种情况下不会调用它。
如何设置doctrine / symfony以使这些查询结果可以缓存?
我正在运行Symfony 2.1.3和doctrine 2.3.x
答案 0 :(得分:1)
我发现无法在函数中的doctrine构建中启用查询缓存。我会发布一个链接,解释为什么以后再找到它。
答案 1 :(得分:0)
您的实体可能看起来像这样:
MyBundle\Entity\Character:
type: entity
table: Character
fields:
id:
id: true
type: bigint
name:
type: string
length: 255
manyToOne:
race:
targetEntity: Race
joinColumns:
raceId:
referencedColumnName: id
MyBundle\Entity\Race:
type: entity
table: Race
fields:
id:
id: true
type: bigint
name:
type: string
length: 255
oneToMany:
characters:
targetEntity: Character
mappedBy: race
如果是这种情况,那么修改你的Character实体映射,以便它也急切地加载Race实体:
MyBundle\Entity\Character:
...
manyToOne:
race:
targetEntity: Race
joinColumns:
raceId:
referencedColumnName: id
fetch: EAGER
fetch
选项上的学说文档:@ManyToOne