2012-01-05 18 views
3

我有一个用户类与另一个实体结果的单一对一的关联如何避免Symfony2中自动加载一个一对一的关系

一切工作正常,但只要我加载一组用户,我可以在剖析器中看到,对于每个用户,symfony执行查询以加载他的结果。

我不需要任何地方的结果,我手动检索它,当我需要。 我开始相信symfony会自动加载与实体的一对一关系,但没有找到如何避免它。

我的课:

class User extends BaseUser { 
    /** 
    * @ORM\OneToOne(targetEntity="Result", mappedBy="user", cascade={"all"}, orphanRemoval=TRUE) 
    */ 
    protected $result; 
} 

class Result { 
    /** 
    * @ORM\OneToOne(targetEntity="User", inversedBy="result") 
    * @ORM\JoinColumn(name="id_user", referencedColumnName="id") 
    */ 
    protected $user; 
} 

----- -----编辑

我发现当用户实体在formbuilder被加载,它才会发生:

$builder 
    ->add('user', 'entity', array(
     'class' => 'ThemBaseBundle:User', 
     'query_builder' => function($repository) { 
      return $repository->createQueryBuilder('a') 
      ->orderBy('a.lastName', 'ASC'); 
     }, 
     'property' => 'fullName' 
    )) 
; 

回答

2

我不确定,但可能是一对一的关系默认情况下热切地被提取。尝试将提取策略切换为懒惰。有关更多信息,请参阅this section

+1

我试过了,但仍然加载结果 – grimmlink 2012-01-05 06:51:14

+0

我发现它只发生在窗体中,我编辑了我的问题。 – grimmlink 2012-01-05 07:11:26

+0

我发现的唯一解决方案是将加入列放在用户实体上,而不是在结果实体上。 这是一个相当奇怪的行为,但至少我现在没有得到太多的查询。 – grimmlink 2012-01-05 08:07:39

相关问题