场合
我是一个用户在分配给他们时注册学习的系统。这种学习然后引用会话和模块,但为了这个问题,它们并不是那么重要。
简化数据模型(//注释表示关系注释):
user
id
//ReferenceMany(
// targetDocument="UserModule",
// mappedBy="user",
// cascade={"persist"},
// orphanRemoval=true
//)
userModules
userModule
id
status
// ReferenceOne(
// targetDocument="User"
//)
module
module
id
title
此报告采用Excel电子表格的形式。为了构建这个,我开始通过引用来获取所有模块,因此最终得到x个标题。例如。 M01,M02等
与此同时,我创建了一个模块" map"因为从理论上讲,一个用户甚至没有后来的标题。
一旦设置了这些标题和地图,我就开始循环用户自己并输出每个模块的状态。
然后我遍历用户模块并与每个可能的模块的已分配用户模块进行比较。
问题
这种方法在通过几百人循环时非常耗费资源,并且随着模块数量的增加而呈指数级增长。
我发现即使用户最初可能按正确顺序使用userModule,它也会在更改时迅速丢失该订单。 E.G userModules数组以M04而不是M01开头。
问题
在为任何给定用户循环访问userModules时,如何维护模块的顺序。 M01,M02,M03
尝试
当我获得用户时,这就是UserRepository中的内容,为了问题再次简化了
return $this->createQueryBuilder()
->sort('userModules.module.id' => 'asc') // Tried many varieties of this
->getQuery()
->execute();
提前感谢您阅读此问题