doctrine2: как выбрать объекты из разных репозиториев
В моем приложении symfony2/doctrine2 пользователи могут помечать элементы, доведенные до сведения администратора.
Мне нужно получить все помеченные элементы (они реализуют VoteInterface).
Я безуспешно пытаюсь сделать следующее, но это не работает, потому что мне нужно выбрать хотя бы одну корневую сущность. Если я выберу одну корневую сущность, у меня будет ошибка выделения памяти.
Во всяком случае, я даже не уверен, что это правильный путь. Как выбрать все элементы, связанные с голосами? Конечно, я могу создать один построитель запросов для каждого типа сущности, но это не то, чего я пытаюсь достичь, я бы хотел одного построителя запросов.
public function getFlagsQueryBuilder()
{
return $this
->createQueryBuilder('v')
->select('u, c, p')
->leftJoin('v.user', 'u')
->leftJoin('v.comment', 'c')
->leftJoin('v.post', 'p')
->groupBy('u, c, p')
->addSelect('u, c, p')
->where('v.value = ?1')
->setParameter(1, 0)
;
}
1 ответ
Если у вас есть проблемы с памятью, это может быть потому, что вы загружаете слишком много строк в память одновременно.
Из документов Доктрины: http://doctrine-orm.readthedocs.org/en/latest/reference/batch-processing.html
Это позволит вам перебирать результаты без проблем с памятью. Он будет загружать строки при необходимости.
Вы также можете использовать эти методы для запроса ограниченного числа строк:
Запрос:: setMaxResults ($ maxResults)
Query:: setFirstResult ($ офсет)
Если вы планируете получать COUNT, SUM, AVG или любые другие агрегатные функции для столбца, я предлагаю вам сделать запрос, чтобы получить их вместо информации агрегации из вашей итерации. Это будет быстрее с запросом.
Я надеюсь, что это поможет