教义 2 中的关联映射
<?php
class User
{
//...
/**
* @ManyToMany(targetEntity="Group")
* @JoinTable(name="User_Group",
* joinColumns={@JoinColumn(name="User_id", referencedColumnName="id")},
* inverseJoinColumns={@JoinColumn(name="Group_id", referencedColumnName="id")}
* )
*/
private $groups;
//...
}
在测试中,假设在此示例中 $groups 在构造函数中初始化为 ArrayCollection(),返回与用户关联的所有组。
我的开发团队中的一位程序员对这种情况提出了一个很好的观点。它加载与用户实体关联的所有组,我们可能不需要所有组。
在执行 DQL 连接语句时,假设我们要选择最喜欢的组,可以通过 DQL 连接实现,我们加入用户、组和收藏夹。Doctrine 是否再次查询所有组?这是我要指出的开销,已经有一个所有组的数组集合。
我们如何控制关联映射的结果?或者如果我们删除关联映射,我们是否仍然可以使用 DQL 来加入没有设置关联映射的实体?或者,Doctrine 是否真的使用了 DQL 中关联映射的数据?