我正在试图弄清楚如何在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做同样的事情?
答案 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实体。