【问题标题】:Doctrine 2 proxy loading and array resultDoctrine 2 代理加载和数组结果
【发布时间】:2013-08-16 21:07:40
【问题描述】:

...

嗨!使用 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 的内容?

非常感谢!!

【问题讨论】:

    标签: join doctrine-orm lazy-loading dql


    【解决方案1】:

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

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

    这是一个相关问题:Limiting a doctrine query with a fetch-joined collection?

    【讨论】:

    • 好的,所以没有限制结果集的“神奇”方式。就像一种水合类型应该说“限制从,然后选择所有这些ID,然后水合数组”。我试试分页器,谢谢!
    猜你喜欢
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    • 2012-07-03
    • 2011-12-17
    相关资源
    最近更新 更多