2014-09-22 56 views
1

我有一个视频表,并在该表中我有字段评论其中包含注释的id,现在我使用连接查询来获取,在一个查询,但我怎么得到该评论?Symfony2加入查询

这里是我的代码:

$Actions = $this->EntityManager()->getRepository('AppBundle:Video') 
            ->createQueryBuilder('V') 
            ->join('AppBundle:VideoComment', 'VC') 
            ->where('V.videoId = :VideoID') 
            ->andWhere('VC.videoId = :VideoID') 
            ->setParameter('VideoID', $VideoID) 
            ->getQuery() 
            ->getResult(); 

我如何从加盟实体的实际有何评论?

+0

如果你有视频实体的关系,你可以简单地浏览它(如getComments()) – Matteo 2014-09-22 16:26:50

+0

如果我没有关系? – SilvioMarijic 2014-09-22 16:43:42

+0

然后你不会明白。再加上你的查询都搞砸了。 DQL不是SQL。看看文档中的例子。 – Cerad 2014-09-22 18:21:35

回答

5

你可以做@cezar早些时候说过的,但有一点改变:你必须定义字段以从评论表中检索相关条目。 所以,您的查询可能是这样的:

$em = $this->get('doctrine.orm.entity_manager'); 
$videos = $em->createQuery('select v 
          from YourBundle:Video v 
          left join YourBundle:Comment c 
          where v.comment = c.id') 
      ->getResult(); 

,或者您可以使用查询生成器做类似的东西:

$videos = $em->createQueryBuilder('v') 
      ->add('select', 'v, c') 
      ->add('from', 'YourBundle:Video v') 
      ->leftJoin('YourBundle:Comment', 'c') 
      ->where('v.comment = c.id') 
      ... // some other conditions if you need 
      ->getQuery() 
      ->getResult(); 

这两种情况下,我描述账户为视频和评论实体可能无法在正式的关系(我的意思是他们的关系可能不会在你的教条/ orm文件中描述)。

1

这里有一个建议:

<?php 
namespace You\AppBundle\Repository; // You is your vendor name, AppBundle is your bundle 

use Doctrine\ORM\EntityRepository; 

class VideoCommentRepository extends EntityRepository 
{ 
    public function getVideoComment($VideoId) 
    { 
     $query = $this->getEntityManager()->createQuery(
      'SELECT v FROM YouAppBundle:Video v LEFT JOIN v.comment c 
      WHERE v.id = :id' 
     )->setParameter('id', $VideoId); 

     return $query->getResult(); 
    } 
} 

正如你说你有一个表,“视频”,并在该表中有一个字段“注释”包含注释的ID。我想你有从'视频'到'评论'的'一对多'关系。通过这个简单的查询,您应该能够获得给定VideoID的所有评论。我没有测试这个,但我认为它应该工作。尝试一下,并根据需要进行调整。