Doctrine 2中的多对多查询

Jas*_*ett 6 doctrine-orm

我试图弄清楚如何在Doctrine 2中进行多对多查询,我似乎无法找到答案.我确切地知道如何在直接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
Run Code Online (Sandbox Code Playgroud)

我如何用Doctrine做同样的事情?

Cer*_*rad 5

该手册有一些很好的例子:http: //docs.doctrine-project.org/projects/doctrine-orm/en/2.1/reference/query-builder.html

在你的情况下,它看起来像:

    // 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();
Run Code Online (Sandbox Code Playgroud)

你没有发布你的实体代码所以我不得不猜测你如何定义关系.如果您在User和MediaArea之间只有一个简单的ManyToMany,那么您可以跳过UserMediaArea连接.D2会弄明白的.由于你真的只想要MediaArea信息,我实际上会反转查询并从MediaArea中进行选择,因此不需要返回用户信息.但我试图按照你原来的查询.