Join 原则2代理加载和数组结果

Join 原则2代理加载和数组结果,join,doctrine-orm,lazy-loading,dql,Join,Doctrine Orm,Lazy Loading,Dql,嗨!在Doctrine 2.3中,我尝试以数组的形式获取用户及其组的列表(更改:) 因此,我定义了如下用户类: /** * @Entity **/ class User { /** * @ManyToMany(targetEntity="Group") * @var Group[] **/ protected $groups; ... } 小组课: /** * @Entity **/ class Goup { /**

嗨!在Doctrine 2.3中,我尝试以数组的形式获取用户及其组的列表(更改:)

因此,我定义了如下用户类:

/**
 * @Entity
 **/
class User {
    /**
     * @ManyToMany(targetEntity="Group")
     * @var Group[]
     **/
    protected $groups;

    ...
}
小组课:

/**
 * @Entity
 **/
class Goup {
    /**
     * @ManyToMany(targetEntity="User)
     * @var User[]
     **/
    protected $users;

    ...
}
然后我有10000个用户和100个组,每个用户可以有几个组。对于只读,我想检索前200个用户及其组

如何使用阵列水合作用实现这一点?可能吗

我试过:

$query = new \Doctrine\ORM\QueryBuilder($em);
$query
    ->select('u, g')
    ->from('User', 'u')
    ->leftJoin('Group', 'g')
    ->setFirstResult(0)
    ->setMaxResults(200)
    ->getQuery()
    ->getArrayResult();
但我没有200个用户。由于加入,我得到了40或50个用户(这是正常的,因为200个用户的限制考虑了组)。我知道,使用lazy(或eager?)加载和代理,我可以延迟组的加载,但这里我有一个数组,所以我不能调用任何方法

是否有要添加的注释,或要配置到QueryBuilder或查询的内容


非常感谢

此处的黄色注释框中描述了您的问题:

当您使用Doctrine Paginator而不是getArrayResult()时,这是可能的。您可以在此处阅读如何使用分页器:

这是一个相关的问题:

好的,所以没有“神奇”的方法来限制结果集。就像一种水合作用,应该说“限制从,然后用这些ID选择所有,然后水合阵列”。我会用paginator试试,谢谢!