0

我有这样的结构:单个个人资料可以参加多项研究,并且对于每项研究,都有一个statute外键字段study_statute。在每一行的 HTML 中,我需要显示个人资料的信息:profile.name、profile.study.field、profile.study.statute。我已经使用

$profileRepository->findAll()

但它会产生很多查询,我想优化。目前有查询获取配置文件,每个配置文件要求研究,每个研究要求法规名称。因此,如果有 2 个个人资料,并且每个个人资料都参加了 2 项研究,我有

1(列表)+1(配置文件#1的研究列表)+2(上述每个研究的研究名称)+1(配置文件#2的研究列表)+2(上述每个研究的研究名称)查询。

如何优化这个?

在普通的 PHP 中,我会这样做:为所有与研究和研究名称连接的配置文件获取大表,并将其解析为多维数组 fe $profile[1]['studies'][1]['name']

4

1 回答 1

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除了一件事之外的结果相同。所有相关实体都将被提取。如果您访问“研究”或“法规”学说,则不需要lazy load与另一个查询关联。

于 2012-05-23T12:32:40.423 回答