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 или любые другие агрегатные функции для столбца, я предлагаю вам сделать запрос, чтобы получить их вместо информации агрегации из вашей итерации. Это будет быстрее с запросом.

Я надеюсь, что это поможет

Другие вопросы по тегам