Join 原则2代理加载和数组结果
嗨!在Doctrine 2.3中,我尝试以数组的形式获取用户及其组的列表(更改:) 因此,我定义了如下用户类: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 { /**
/**
* @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试试,谢谢!