Doctrine 2离开Join,有很多对很多关系,返回错误的行数

时间:2012-04-18 18:23:57

标签: php doctrine many-to-many doctrine-orm

我有一个问题是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。什么?

我错过了什么吗?

谢谢, 标记

2 个答案:

答案 0 :(得分:5)

多对多的最佳方式是MEMBER OFNOT 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();