我对教义 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 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();
如果你这样尝试呢:
$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();