我正在使用Symfony2和Doctrine2(最新版本)并定义了这种关系:
/**
* @ORM\OneToMany(targetEntity="Field", mappedBy="event", fetch="EAGER")
* @ORM\OrderBy({"name" = "ASC"})
*/
protected $fields;
关系的另一面定义为:
/**
* @ORM\ManyToOne(targetEntity="Event", inversedBy="fields", fetch="EAGER")
* @ORM\JoinColumn(nullable=false, onDelete="CASCADE")
*/
protected $event;
在执行“fetchOnyById”时,Doctrine会运行2个查询。 1获取对象本身,1获取相关字段。 我希望这是一个联接,但事实并非如此。
在控制器中完成后,我将对象传递给树枝。 在那里,我再次检索字段作为对象的属性。 这会导致运行另一个查询以再次检索字段。
显然我做错了,因为我预计只会运行1个查询而实际运行3个。
答案 0 :(得分:3)
我认为发生这种情况的原因是因为您提取的是实体,而不是特定的查询。 Doctrine的想法是你获取对象,不是与数据库交互而是与对象资源交互,好像它们都像存储实体一样被关联/引用。如果您需要像您所描述的那样的查询,那么最好使用DQL,但此时您不会获取创建的实体,而是获得自定义结果。
我希望这是有道理的。
基本上,您使用的默认关联是获取关联对象而不是连接查询。