Doctrine - 三张表的关系

Doctrine - relation of three tables

我在编写 Doctrine Query Builder 时遇到了麻烦。

我有一个 Posts table 与 AccountToken table 相关,例如:

class Posts

/**
 * @ORM\ManyToOne(targetEntity="App\Entity\AccountToken")
 * @ORM\JoinColumn(name="account_token_id", referencedColumnName="uuid", nullable=false)
 */
protected $accountTokenId;

我正在编写一个查询构建器,我想通过 UUID 提取与 table 相关的所有结果并具有特定状态。 type 值在 AccountToken table.

中定义

在 table 中,type 也有关系,它在 AccountToken table:

中定义
 class AccountToken
    
    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Types")
     * @ORM\JoinColumn(name="type_id", referencedColumnName="id", nullable=false)
     */
    protected $type;

这对我来说是一个棘手的问题,因为我必须要处理关系。

有人知道如何提取结果吗:

"Return 我的帖子具有 type='success' 值".

 $this->createQueryBuilder('p')
            ->select('p')
            ->join('App\Entity\AccountToken', 'at', Expr\Join::WITH, 'at.uuid = p.accountTokenId')
            ->join('App\Entity\ChannelType', 'ct', Expr\Join::WITH, 'ct.id = at.type')
            ->where('p.accountTokenId = :accountTokenId')
            ->setParameter('successStatus', Types::STATUS_SUCCESS)
            ->getQuery()
            ->getResult();

这是我试图完成它的草稿,但由于我是 Doctrine 的新手,所以不知道如何加入一个在其相关 [=45= 中有价值的 table ].令人困惑。

首先,您的查询中没有任何参数 successStatus

我认为你把事情复杂化了。

return $this->createQueryBuilder('p')
            ->leftJoin('p.accountToken', 'a')
            ->leftJoin('a.type', 'ct')
            ->where('ct.successStatus = :successStatus')
            ->setParameter('successStatus', Types::STATUS_SUCCESS)
            ->getQuery()
            ->getResult()
            ;