我有一个用于我玩的视频游戏的网站,正在通过实现一些额外的缓存来提高网站的性能。我已经能够在自定义存储库函数上实现查询结果缓存,但还没有找到任何地方可以解释我如何在内置函数(findOneById等)上包含查询结果缓存。我之所以对此感兴趣,是因为我的许多数据库查询都是从这些"本机"存储库函数中执行的。
因此,作为一个例子,我有一个具有以下属性的字符实体对象:id、名称、种族、类等。
此对象中的种族和类是对种族和类的其他实体对象的引用。当我加载一个要显示的角色时,我会按名称(findOneByName)获取角色,然后在模板中按$characterObject->getRace()->getName()
显示角色的种族/类别。模板中的这些方法调用导致在我的Race/Class实体表上运行一个查询,该查询按id(我假设为findOneById)获取实体。
我曾尝试在存储库中创建自己的findOneById函数,但在这种情况下不会调用它。
如何设置条令/符号,使这些查询结果可以缓存?
我正在运行Symfony 2.1.3和条令2.3.x
我发现在条令内置函数上启用查询缓存是不可能的。我会发布一个链接,解释为什么以后我再次找到它。
您的实体可能看起来像这样:
MyBundleEntityCharacter:
type: entity
table: Character
fields:
id:
id: true
type: bigint
name:
type: string
length: 255
manyToOne:
race:
targetEntity: Race
joinColumns:
raceId:
referencedColumnName: id
MyBundleEntityRace:
type: entity
table: Race
fields:
id:
id: true
type: bigint
name:
type: string
length: 255
oneToMany:
characters:
targetEntity: Character
mappedBy: race
如果是这样的话,那么修改你的角色实体映射,使它也能急切地加载种族实体:
MyBundleEntityCharacter:
...
manyToOne:
race:
targetEntity: Race
joinColumns:
raceId:
referencedColumnName: id
fetch: EAGER
关于fetch
选项的条令文件:@ManyToOne