...Doctrine 2 proxy loading and array result
Hi! с 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 или запроса?
Большое спасибо!
Ok, так что нет никакой «магии» способом ограничения ResultSet. Как тип гидратации, который должен сказать «предел от, затем выберите все с этими идентификаторами, а затем гидратируйте массив». Я попробую с paginator, спасибо! – rekam