我有这样的结构:单个简档可以参加几项研究,每个研究都有statute
字段,这是study_statute
的外键。在每行的HTML中,我需要显示配置文件的信息:profile.name,profile.study.field,profile.study.statute。我用
$profileRepository->findAll()
但它产生了很多查询,我想优化。目前有查询提取配置文件,每个配置文件都要求进行研究,并且每个研究都要求提供法规名称。因此,如果有2个配置文件,每个配置文件参加2个研究我
1(列表) +1(个人资料#1的学习列表) +2(上述每项研究的研究名称) +1(配置文件#2的研究列表) +2(上述每项研究的研究名称) 查询。
如何优化?
在普通的PHP中,我会这样做:为研究和研究名称加入的所有配置文件获取大表,并将其解析为多维数组,例如: $profile[1]['studies'][1]['name']
。
答案 0 :(得分:0)
您可以使用dql fetch join:
$profiles = $em->createQuery('select p, stu, sta from YourBundleName:Profile p join p.studies stu join stu.statute sta')
->getResult();
除了一件事,结果与使用findAll
的结果相同。所有相关实体都将被提取。如果您访问“学习”或“法规”,则Doctrine不需要lazy load
与其他查询的关联。