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