Doctrine 2中的多对多查询

时间:2012-03-29 21:04:38

标签: 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

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

2 个答案:

答案 0 :(得分: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();

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

答案 1 :(得分:-1)

SELECT ma.id, ma.name
FROM User u 
JOIN u.media

User是User实体,u.media是Media实体。