如何使用Doctrine在Symfony上进行连接查询?

时间:2016-11-10 08:18:57

标签: php sql symfony join doctrine

我有点坚持使用querybuilder来创建连接查询。 有一个名为" Person"还有一张名为" Vacancy"的表格。如果一个人与空缺相关联,则person.id和vacancy.id将保存在名为" Candidacy"的表格中。那么如何才能让所有能够获得空缺的人获得空缺.1?

那么我在哪里发起AppBundle:Candidacy实体?

$entity = $em
    ->getRepository('AppBundle:Person')
    ->createQueryBuilder('p')
    ->join('p.id', 'c')
    ->where('c.vacancyId= 1')
    ->getQuery()
    ->getResult();

提前谢谢。

2 个答案:

答案 0 :(得分:1)

看起来你有很多对多的关系。 您应该将您的人员和职位空缺表通过候选人与人员联系起来,然后将空缺与候选人联系起来。

小例子:实体用户通过UserEngagement表附加到Engagement。

        $qb = $this->_em->createQueryBuilder()
        ->select('u')
        ->from($this->_entityName, 'u')
        ->join('u.userEngagements', 'ue')
        ->join('ue.engagement', 'en')
        ...

答案 1 :(得分:1)

您的存储库中的示例:

public function getPersonVacancy($personId) {
    $qb = $this->createQueryBuilder('p');
    $qb->leftJoin('p.vacancy', 'v');
    $qb->select('v.name', 'v.id');
    $qb->where('p.id = :personId');
    $qb->setParameter('personId', $personId);
    return  $qb ->getQuery()->getResult();

这是为了给你一个例子,它可能不适用于复制粘贴。 此外,所有连接方法都在学说文档中进行了解释,请随时阅读http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/query-builder.html