原则 2 左联接,与,多对多关系,返回错误的行数


Doctrine 2 leftJoin, with, manytomany relationship, wrong number of rows returned

我对教义 2 有问题,并且我正在尝试工作。这可能是我的查询构建器,但我似乎无法弄清楚。

我有一个连接表,如下所示:

----------------------------------
| user_id    |   attraction_id   |
----------------------------------
| 4              1               |
| 4              2               |
| 4              3               |
----------------------------------

对于两个模型,用户和吸引力,其中用户是关系的所有者。

当我执行此查询时:

$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 的景点是......零。什么?

我错过了什么吗?

谢谢马克。

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

如果你这样尝试呢:

        $attractions = $CI->em->createQueryBuilder()
                        ->from(''ListLovers'Model'Attraction', 'a')
                        ->addSelect('a')
                        ->leftJoin('a.users', 'u')
                        ->addSelect('u')
                        ->where('u.id = :uid')
                        ->setParameter('uid', 4)
                    ->getQuery()
                    ->getResult();