2

这是我在 Symfony2-Project 中的查询,使用原则:

    $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(产品是某种 rubric 的“子目录”)

对于一个农民,我现在想要所有的量规,没有其他任何东西。但是当我更改select-part 时出现错误,它说它需要joined选择所有实体......

好吧,现在我得到了所有加入的信息,所以对于 1 个农民的 100 种产品,我得到了每一个带有标题和农民的产品(我不知道为什么我也得到了农民..)

有什么建议么?

4

1 回答 1

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
    )

QueryBuilderAPI 中,这如下所示:

$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:如您所见,它更简单。

于 2013-02-12T10:49:31.087 回答