渴望加载,ArrayResult&学说2

时间:2011-07-25 16:51:02

标签: arrays web-services doctrine-orm eager-loading

我需要提供一个返回文章的网络服务。

我想在该结果中包含用户关系,以避免我的客户端调用另一个方法来加载用户对象。

我使用数组结果,因为我想要一个数组集合(我认为最好使用它)所以我希望我可以急于加载我的用户。

我试过了:

* @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 个答案:

答案 0 :(得分:3)

当您使用DQL查询时,您已添加JOIN子句以加入相关实体:

$qb->createQueryBuilder('a')
    ->addSelect('u')
    ->join('a.user', 'u')
    ...
当您使用EntityManager获取实体时,正在使用

fetch="EAGER"fetch="LAZY",即:

$article = $em->find('Entity\Article', 123);