如何编写SQL查询内连接以避免延迟加载?

时间:2013-10-21 08:26:17

标签: symfony doctrine dql

我的代码:

$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查询中获取所有数据吗?简单的performe sql查询

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

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

修改 我想拥有对象并像访问foreach循环/非标量数据一样访问它们。

2 个答案:

答案 0 :(得分:1)

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

  

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

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

答案 1 :(得分: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();
    }