渴望加载、ArrayResult 和学说2

发布于 2024-11-26 15:14:25 字数 1138 浏览 0 评论 0原文

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

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

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

我尝试过:

* @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

I need to provide a webservice which returns articles.

I want to include the user relationship in that result to avoid my clients to call another method to load the user object.

I use an Array Result because I want a collection of array (I think it's better to work with) so I wish I could eager load my user.

I tried:

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

But it doesn't look to work.`


Edit, some code:

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;
}

And I call this method with the $useArrayResult flag sets to TRUE

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

妄想挽回 2024-12-03 15:14:25

当您使用 DQL 查询时,您必须添加 JOIN 子句来连接相关实体:

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

fetch="EAGER"fetch="LAZY" 是当您使用 EntityManager 获取实体时使用,即:

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

When you're using DQL query you have add JOIN clause to join related entities:

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

fetch="EAGER" and fetch="LAZY" are being used when you're fetching entities using EntityManager, ie:

$article = $em->find('Entity\Article', 123);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文