通过链接的ManyToOne关系查找对象

时间:2017-05-13 23:05:09

标签: mysql symfony

我正在试图找出如何根据分层关系找到一组对象。我有3个这样的实体:

推荐 - > manyToOne - >患者 - > manyToOne - >支付者

如何找到给定付款人的所有推介?

我正在使用symfony3和mysql以及doctrine。我的实体:

class Referral
{
    // usual stuff

    /**
     * @ORM\ManyToOne(targetEntity="Patient")
     */
    private $patient;
}

class Patient
{
    // usual stuff

    /**
     * @ORM\ManyToOne(targetEntity="Payor")
     */
    private $payor;
}

class Payor
{
    // usual stuff
}

显然我可以使关系成为双向的,例如我可以在我的控制器中做这样的事情:

$patients = $payor->getPatients();
foreach ($patients as $patient) {
    $referrals = $patient->getReferrals();
}

然后将它们收集到一个合适的数组中,但这看起来很混乱,我宁愿在我的存储库中的单个数据库查询中完成所有操作。可以这样做吗?

1 个答案:

答案 0 :(得分:1)

您可以使用查询找到给定付款人的所有推介。

在ReferralRepository中

public function findReferralsByPayor(Payor $payor)
{
    $qb = $this->createQueryBuilder('r');

    $qb
        ->join('BUNDLENAME:Patient', 'p', 'WITH', 'p.id = r.patient')
        ->where('p.payor = :payor')->setParameter('payor', $payor)
        ;

    return $qb->getQuery()->getResult();
}