我有一个问题是Doctrine 2和一个关于maytomany关系的左联盟我正在努力工作。它可能是我的查询构建器,但我似乎无法弄明白。
我有一个像这样的联接表:
----------------------------------
| user_id | attraction_id |
----------------------------------
| 4 1 |
| 4 2 |
| 4 3 |
----------------------------------
对于两个模型,User和Attraction,其中User是该关系的所有者。
执行此查询时:
$attractions = $CI->em->createQueryBuilder()
->select('a', 'u')
->from('\ListLovers\Model\Attraction', 'a')
->leftJoin('a.users', 'u', \Doctrine\ORM\Query\Expr\Join::WITH, 'u.id = 4')
->getQuery()->getResult();
我的用户指望id为1的景点是1.太棒了!
现在,如果我将另一行添加到连接表中,如下所示:
----------------------------------
| user_id | attraction_id |
----------------------------------
| 1 1 |
| 4 1 |
| 4 2 |
| 4 3 |
----------------------------------
...并执行相同的查询,我的用户计算id为1的景点是...... ZERO。什么?
我错过了什么吗?
谢谢, 标记
答案 0 :(得分:5)
多对多的最佳方式是MEMBER OF
或NOT MEMBER OF
。
$attractions = $CI->em->createQueryBuilder()
->select('a', 'u')
->from('\ListLovers\Model\Attraction', 'a')
->where(':uid MEMBER OF a.users')
->setParameter('uid', 4)
->getQuery()->getResult();
答案 1 :(得分:0)
如果你这样尝试怎么办:
$attractions = $CI->em->createQueryBuilder('a')
->leftJoin('a.users', 'u')
->addSelect('u')
->where('u.id = :uid')
->setParameter('uid', 4)
->getQuery()
->getResult();