我试图弄清楚如何在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做同样的事情?
该手册有一些很好的例子: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中进行选择,因此不需要返回用户信息.但我试图按照你原来的查询.
| 归档时间: |
|
| 查看次数: |
9219 次 |
| 最近记录: |