Doctrine orm 条令2中的多对多查询
我试图找出如何在条令2中进行多对多查询,但我似乎找不到答案。我确切地知道我将如何在straight SQL中实现这一点:Doctrine orm 条令2中的多对多查询,doctrine-orm,Doctrine Orm,我试图找出如何在条令2中进行多对多查询,但我似乎找不到答案。我确切地知道我将如何在straight SQL中实现这一点: SELECT ma.id, ma.name FROM user u JOIN user_media_area uma ON uma.user_id = u.id JOIN media_area ma ON uma.media_area_id = ma.id 我怎么能对教义做同样的事 SEL
SELECT ma.id,
ma.name
FROM user u
JOIN user_media_area uma ON uma.user_id = u.id
JOIN media_area ma ON uma.media_area_id = ma.id
我怎么能对教义做同样的事
SELECT ma.id, ma.name
FROM User u
JOIN u.media
用户是用户实体,u.media是媒体实体。手册中有一些很好的例子: 在您的情况下,它看起来像:
// Build query
$em = $this->getEntityManager();
$qb = $em->createQueryBuilder();
$qb->addSelect('user');
$qb->addSelect('mediaArea');
$qb->from('SomeBundle:User','user');
$qb->leftJoin('user.userMediaArea','userMediaArea');
$qb->leftJoin('userMediaArea.mediaArea','mediaArea');
$query = $qb->getQuery();
$users = $query->getResult();
echo $users[0]->getUserMediaArea()->getName();
您没有发布实体代码,因此我不得不猜测您是如何定义关系的。如果用户和MediaArea之间只有一个简单的ManyToMany,那么可以跳过UserMediaArea连接。D2会解决的。由于您只需要MediaArea信息,我实际上会反向查询,并从MediaArea中进行选择,这样就不需要返回用户信息。但我正试图按照您最初的查询进行操作。谢谢您的回复。它的PHP部分呢?这是怎么回事?$sql='从用户u中选择ma.id,ma.name加入u.media';$result=$entityManager->createQuery($sql)->getResult();我没试过这个。仔细检查后,您的DQL甚至没有引用我的联接表。你的
ma
来自哪里?另外,我没有所谓的媒体
。我不确定你是否仔细阅读了我的问题或校对了你的答案。@jason,你在帖子中没有提到你的实体结构,所以Tuong只是给出了一种广义的DQL,但他的DQL是完全可以接受的。u、 在您的情况下,media相当于u.mediaArea。谢谢!成功了。(我对您的原始代码进行了一些编辑,但在发表此评论时,该编辑尚未经过同行评审。)特别感谢您理解我的问题,并在您的答案中使用了我的实体名称。@Cerad您知道如何在带有结果集映射的本机sql中执行此操作吗?遗憾的是,不知道。在少数情况下,我不得不使用sql(出于性能原因)我自己做映射。为什么这个问题被否决了?