0

...

你好!使用 Doctrine 2.3,我试图以数组的形式获取用户及其组的列表(进行更改:))。

所以我定义了这样的用户类:

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

    ...
}

和小组课:

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

    ...
}

然后我有 10'000 个用户和 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 的限制考虑了组)。我知道使用惰性(或急切?)负载和代理,我可以推迟组的负载,但这里我有一个数组,所以我不能调用任何方法。

是否有要在某处添加的注释,或者要配置到 QueryBuilder 或 Query 的东西?

非常感谢!!

4

1 回答 1

0

您的问题在此处的黄色注释框中进行了描述:http: //docs.doctrine-project.org/en/latest/reference/dql-doctrine-query-language.html#first-and-max-result-items-dql -仅查询

当您使用 Doctrine Paginator 而不是 getArrayResult() 时,这是可能的。您可以在此处阅读如何使用分页器:http: //docs.doctrine-project.org/en/latest/tutorials/pagination.html

这是一个相关的问题:使用 fetch-joined 集合限制学说查询?

于 2013-08-15T17:32:10.480 回答