首页 > 解决方案 > 教义——三表关系

问题描述

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

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

class Posts

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

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

在该表中,类型也有关系,它在AccountToken表中定义:

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

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

有人知道如何提取结果:

“将具有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 的新手,所以不知道如何加入在其相关表中具有价值的表。这很令人困惑。

标签: phpsymfonydoctrine-ormdoctrinedoctrine-query

解决方案


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

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

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

推荐阅读