Стремительная нагрузка, ArrayResult & Doctrine 2 - PullRequest
2 голосов
/ 25 июля 2011

Мне нужно предоставить веб-сервис, который возвращает статьи.

Я хочу включить в этот результат отношение пользователя, чтобы мои клиенты не вызывали другой метод для загрузки объекта пользователя.

Iиспользуйте Array Result, потому что я хочу коллекцию массивов (я думаю, что с ней лучше работать), поэтому я бы хотел загрузить моего пользователя.

Я пытался:

* @ManyToOne(targetEntity="\My\Model\User\User", fetch="EAGER")

Но этоне похоже на работу.


Редактировать, некоторый код:

public function getPublishedArticles($page, $count, $useArrayResult = false) {
        $qb = $this->createQueryBuilder('a');
        $qb->where('a.status = :status')
            ->orderBy('a.published_date', 'DESC')
            ->addOrderBy('a.creation_date', 'DESC')
            ->setParameter('status', Article::STATUS_PUBLISHED )
            ->andWhere('a.published_date <= :date')
            ->setParameter('date', date('Y-m-d'));
        }

        $adapter = new PaginationAdapter($qb->getQuery());
        $adapter->useArrayResult($useArrayResult);
        $paginator = new \Zend_Paginator($adapter);
        $paginator->setItemCountPerPage($itemCount)
            ->setCurrentPageNumber($page);

        return $paginator;
}

И я вызываю этот метод с установленным флагом $useArrayResult TRUE

1 Ответ

3 голосов
/ 25 июля 2011

Когда вы используете DQL-запрос, вы добавляете предложение JOIN для объединения связанных сущностей:

$qb->createQueryBuilder('a')
    ->addSelect('u')
    ->join('a.user', 'u')
    ...

fetch="EAGER" и fetch="LAZY" используются при извлечении объектов с помощью EntityManager, то есть:

$article = $em->find('Entity\Article', 123);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...