Doctrine orm 条令2中的多对多查询

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

我试图找出如何在条令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
我怎么能对教义做同样的事

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(出于性能原因)我自己做映射。为什么这个问题被否决了?