使用双连接优化DQL

时间:2012-05-23 11:01:11

标签: symfony doctrine-orm dql

我有这样的结构:单个简档可以参加几项研究,每个研究都有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']

1 个答案:

答案 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与其他查询的关联。