我的代码:
$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循环/非标量数据一样访问它们。
答案 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();
}