Symfony2连接查询

Symfony2连接查询,symfony,doctrine-orm,query-builder,Symfony,Doctrine Orm,Query Builder,我有一个视频表,在这个表中我有一个字段comment,它包含另一个表中的注释id,现在我使用joinquery在一个查询中得到它,但是我如何得到那个注释呢 这是我的密码: $Actions = $this->EntityManager()->getRepository('AppBundle:Video') ->createQueryBuilder('V')

我有一个视频表,在这个表中我有一个字段comment,它包含另一个表中的注释id,现在我使用joinquery在一个查询中得到它,但是我如何得到那个注释呢

这是我的密码:

$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();
如何从加入的实体获得实际的评论?

这里有一个建议:

<?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();
    }
}
这里有一个建议:

<?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();
    }
}

您可以按照@cezar前面所说的做,但需要做一点小小的更改:您必须定义字段以从comments表中检索相关条目。
因此,您的查询可能如下所示:

$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文件中描述)。

您可以像@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文件中描述)。

如果您在视频实体上有关系,您可以简单地导航它(如getComments()),如果我没有关系,您将无法获得它。再加上你的问题都搞砸了。DQL不是SQL。请看一下文档中的示例。@SilvioMarijic这里您说“我有一个视频表,在该表中我有字段注释,其中包含其他表中注释的id”,这就是关系。如果您在视频实体上有关系,您可以简单地导航它(类似于getComments())如果我没有亲戚,你就不会明白了。再加上你的问题都搞砸了。DQL不是SQL。请看一下文档中的示例。@SilvioMarijic这里您说“我有一个视频表,在该表中我有字段注释,其中包含其他表中注释的id”,这就是关系。