关于关系的WHERE语句

时间:2017-01-10 10:56:07

标签: php doctrine-orm symfony

我有两张表:PlaceDescription

地点可以包含0个,1个或更多描述。

所以在 Place 实体中,我有一个描述字段:

/**
* @ORM\OneToMany(targetEntity="Description", mappedBy="place")
 */
private $descriptions;

描述实体中,我有一个位置字段:

/**
 * @ORM\ManyToOne(targetEntity="Place", inversedBy="descriptions")
 */
private $place;

我想使用QueryBuilder来获取基于Place的字段的描述。像

这样的东西
SELECT * FROM Description WHERE Place.id = 439483

我想我应该使用join,但它也会返回Places列。我怎么才能根据Place条件得到描述?

由于

编辑:这是我尝试的内容:

$em = $this->getEntityManager();
        $placeRepository = $em->getRepository("AppBundle:Place");
        $q = $placeRepository->createQueryBuilder('p')
            ->select("d")
            ->innerJoin("p.descriptions", "d")
            ->where("p.id = 439483");

        $q = $q->getQuery();
        $res = $q->getResult();

        return $res;

但它返回一个地方和描述,我只想要描述。

2 个答案:

答案 0 :(得分:0)

下次发布您实际尝试过的内容。但由于这是一个简单的查询,所以:

$em = $this->getEntityManager();
            $placeRepository = $em->getRepository("AppBundle:Place");
            $q = $placeRepository->createQueryBuilder('p')
                ->select("d")
                ->innerJoin("p.descriptions", "d")
                ->where("p.id = 439483");

            $q = $q->getQuery();
            $res = $q->getResult();

            return $res;

答案 1 :(得分:0)

要获取与某个地点相关联的说明,您可以这样做:

$em = $this->getEntityManager();
$descriptionRepository = $em->getRepository("AppBundle:Description");
$q = $descriptionRepository->createQueryBuilder('d')
    ->select("d")
    ->innerJoin("d.place", "p")
    ->where("p.id = 439483");

$q = $q->getQuery();
$res = $q->getResult();

return $res;