3

教义 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 中关联映射的数据?

4

0 回答 0