0

我的代码:

$entityManager = $this->getDoctrine()->getEntityManager();
    $result = $entityManager->createQueryBuilder()
                    ->select('c')                        
                    ->from('BlogHomepageBundle:Comment', 'c')
                    ->innerJoin('BlogHomepageBundle:Post', 'po', 'WITH', 'c.postFk = po.postId')
                    ->getQuery()->getResult();
    foreach ($result as $c) {
        //additional sql query
        echo $c->getPostFk()->getName();
    }

它工作得很好,但是当我尝试获取 postFk (帖子与评论一对多关系相关)时,我得到了对 db 的额外查询(延迟加载)。我可以避免这种情况以在一个 DQL 查询中获取所有数据吗?简单的执行sql查询

select c.*, p.* from comment as c inner join post as p on c.post_fk = p.post_id

我想使用 DQL(不是原始 sql)。

编辑 我想拥有对象并像在 foreach 循环中一样访问它们/而不是标量数据。

4

2 回答 2

1

您需要专门选择一个属性或连接以避免延迟加载:

->选择('c','po')

http://www.doctrine-project.org/blog/doctrine-lazy-loading.html

于 2013-10-21T08:55:36.200 回答
1

我想我找到了解决方案 @Rpg600 感谢您的帮助。这是代码:

$entityManager = $this->getDoctrine()->getEntityManager();
    $result = $entityManager->createQueryBuilder()
            ->select('c', 'po')
            ->from('BlogHomepageBundle:Comment', 'c')
            ->innerJoin('c.postFk', 'po', 'WITH', 'c.postFk = po.postId')
            ->getQuery()
            ->getResult();



    foreach ($result as $c) {
        echo $c->getContent();
        echo $c->getPostFk()->getName();
    }
于 2013-10-21T09:21:33.230 回答