Orm Extbase:在运行时选择延迟加载或即时加载

Orm Extbase:在运行时选择延迟加载或即时加载,orm,lazy-loading,typo3,extbase,Orm,Lazy Loading,Typo3,Extbase,我有一个域对象Foo,它与域对象栏有1:n的关系 有两个主要的用例,我需要让所有的foo都符合一些标准。在案例A中,我关心每个foo上的条,在案例B中,我不关心。有相当多的条,因此总是简单地加载条对案例a的性能不好。同样,在案例B中,不急于加载条将导致n+1雪崩。因此,无论是将不动产标记为@Lazy还是不标记它都是正确的选择 现在,我的问题是:是否有可能在查询时告诉extbase持久层是懒惰还是急切?如果是,如何进行?如果否,Extbase中是否有其他方法可以避免n+1问题(即加载所有必要的条,

我有一个域对象Foo,它与域对象栏有1:n的关系

有两个主要的用例,我需要让所有的foo都符合一些标准。在案例A中,我关心每个foo上的条,在案例B中,我不关心。有相当多的条,因此总是简单地加载条对案例a的性能不好。同样,在案例B中,不急于加载条将导致n+1雪崩。因此,无论是将不动产标记为@Lazy还是不标记它都是正确的选择

现在,我的问题是:是否有可能在查询时告诉extbase持久层是懒惰还是急切?如果是,如何进行?如果否,Extbase中是否有其他方法可以避免n+1问题(即加载所有必要的条,然后希望在遍历foos时缓存可以工作)

当然,我最后的办法是用延迟加载加载foo,在第二个查询中手动加载条,然后手动设置关系


有什么建议吗?

在过去的几个月里,我一直在玩弄Extbase并深入研究其内部结构,结果是:这是不可能的

我想这就结束了这个问题,虽然不是我喜欢的方式


事实上,更糟糕的是:根本没有实现渴望加载,文档中为关系设置渴望加载的@Eager标记被忽略。

让它保持惰性,并在需要时将其转换为数组怎么样?(foo->bar->toArray())

我通过重新设计案例B来单独处理foo解决了这个问题。不是很好,但是更好,而且暂时足够快。我仍然想知道如何做到这一点。你能回答你自己的问题,然后将它标记为已解决吗?它仍然会出现在未回答的[typo3]问题列表中。嗯。。。我真的认为这个问题没有得到回答。我找到了一个解决这个问题的方法,但一般情况下…好的。我现在理解了你的第一个评论。做一个SQL查询,然后使用PropertyMapper手动将行映射到对象如何?这样做的好处是什么?这仍然是懒惰的(在使用时额外的DB查询以获取缺少的数据,每个项一个查询),而不是急切的(所有必要的数据都是通过单个初始查询从DB加载的)对于最后一个部分:默认情况下是立即加载,因此没有
@Eager
标记。您可以使用
@lazy
标记将此行为更改为lazy。@恐怕在运行时无法在懒惰行为和渴望行为之间进行选择。是的,您无法在运行时进行设置。