【问题标题】:How to perform a join query using Symfony and Doctrine Query Builder如何使用 Symfony 和 Doctrine Query Builder 执行连接查询
【发布时间】:2013-08-23 19:25:19
【问题描述】:

我有两个实体通过 1:1 关系连接,例如:MyEntity.idRelatedEntity 我想创建一个 Doctrine 查询,我可以根据RelatedEntity 中某个列的值从MyEntity 检索数据。像这样的东西(当然不起作用):

$entity = $em
    ->getRepository('MyBundle:RelatedEntity')
    ->createQueryBuilder('e')
    ->leftJoin('MyBundle:RelatedEntity', 'r')
    ->where('r.foo = 1')
    ->getQuery()
    ->getResult();

任何帮助将不胜感激:)

【问题讨论】:

  • 你在哪里写这个查询?这将帮助我回答您的问题并改进您的代码。是在MyEntityRepository 吗?

标签: php sql symfony doctrine


【解决方案1】:
$entity = $em
    ->getRepository('MyBundle:MyEntity')
    ->createQueryBuilder('e')
    ->join('e.idRelatedEntity', 'r')
    ->where('r.foo = 1')
    ->getQuery()
    ->getResult();

这里左连接也没有意义(因为 where 子句会让它像内连接一样工作)

【讨论】:

  • 太棒了!谢谢!只是一个小的更正,您错过了连接中的 id 部分。它应该是->join('e.idRelatedEntity', 'r')
  • 你能告诉我这个 r 是从哪里来的吗?
  • ->join('e.idRelatedEntity', 'r'),这里定义r为别名,这里随便放什么
【解决方案2】:

请注意,您应该在 MyEntityRepository 中编写此查询

public function getMyEntityWithRelatedEntity($parameter) 
{
    $query = $this->createQueryBuilder('e')
        ->addSelect('r') // to make Doctrine actually use the join
        ->leftJoin('e.relatedEntity', 'r')
        ->where('r.foo = :parameter')
        ->setParameter('parameter', $parameter)
        ->getQuery();

    return $query->getResult();
}

然后在你的控制器/服务中使用它:

$manager = $this->getDoctrine()->getManager();
$results = $manager->getRepository(MyEntity::class)->getMyEntityWithRelatedEntity(1);

【讨论】:

  • 不错的一个(而且更干净)。下次会考虑。现在我正在使用@Uriziel 回答:) 谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-12
  • 2017-12-10
  • 2015-10-29
  • 1970-01-01
  • 1970-01-01
  • 2019-05-19
  • 1970-01-01
相关资源
最近更新 更多