这是我在Symfony2-Project中使用doctrine:
的查询 $qb->select(array('r', 'fp', 'p'))
->from('Farmerguide\BackendBundle\Entity\Farmerproduct', 'fp')
->innerJoin('fp.product', 'p')
->innerJoin('p.rubric', 'r')
->andWhere('fp.farmer= :id')
->setParameter('id', $farmerId);
有关表格/实体的信息: Farmerproduct有一个id,farmer_id和product_id 产品有一个id,和rubric_id(产品是某种“子目录”的量规)
对于一个农民,我现在想要所有的东西,没有别的东西。
但是当我更改select
- 部分时,我收到错误,它表示需要选择所有joined
个实体...
好吧,现在我得到所有加入的信息,所以对于1位农民的100种产品,我得到的每一种产品都带有量规和农民(我不知道为什么我要找农民......)
有什么建议吗?
答案 0 :(得分:3)
您必须选择DQL查询的根实体。假设您没有双向关联,它看起来如下:
SELECT
r
FROM
Farmerguide\BackendBunle\Entity\Rubric r
WHERE
r.id IN (
SELECT
r2.id
FROM
Farmerguide\BackendBundle\Entity\Farmerproduct fp
JOIN
fp.product p
JOIN
p.rubric r2
WHERE
fp.farmer = :id
)
在QueryBuilder
API中,如下所示:
$qb1 = $em->createQueryBuilder();
$qb2 = $em->createQueryBuilder();
$qb2
->select(array('r2.id'))
->from('Farmerguide\BackendBundle\Entity\Farmerproduct', 'fp')
->innerJoin('fp.product', 'p')
->innerJoin('p.rubric', 'r2')
->andWhere('fp.farmer= :id')
$qb1
->select('r')
->from('Farmerguide\BackendBunle\Entity\Rubric', 'r')
->where($qb->expr()->in('r.id', $qb2->getDQL()))
$rubrics = $qb1
->setParameter('id', $farmerId)
->getQuery()
->getResult();
如果你真的不需要QueryBuilder
,请考虑使用普通DQL:正如你所看到的那样简单。