【问题标题】:Doctrine 2 leftJoin, with, manytomany relationship, wrong number of rows returnedDoctrine 2 leftJoin, with, manytomany 关系,返回的行数错误
【发布时间】:2012-04-18 18:23:56
【问题描述】:

我在使用 Doctrine 2 时遇到了问题,并且在我试图开始工作的maytomany 关系中左加入。这可能是我的查询生成器,但我似乎无法弄清楚。

我有一个这样的连接表:

----------------------------------
| 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               |
----------------------------------

...并执行相同的查询,我的用户计数为 1 的吸引力是...零。什么?

我错过了什么吗?

谢谢, 标记。

【问题讨论】:

  • 您必须使用字段连接到另一个表(您使用自定义标识符),并且过滤器必须在 SQL 查询的“where”部分。

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


【解决方案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();

【讨论】:

    【解决方案2】:

    如果你这样尝试会怎样:

            $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();
    

    【讨论】:

    • Doctrine 是如何“知道”的,你的意思是\ListLovers\Model\Attraction 等等?
    猜你喜欢
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    相关资源
    最近更新 更多