I have trouble with writing Doctrine Query Builder.
I have a Posts table which is related to the AccountToken table like:
class Posts /** * @ORMManyToOne(targetEntity="AppEntityAccountToken") * @ORMJoinColumn(name="account_token_id", referencedColumnName="uuid", nullable=false) */ protected $accountTokenId;
I am writing a query builder where I want to pull all the results which are related to that table via UUID and have a specific status. The type value is defined in the AccountToken table.
In that table, type has relation also and it’s defined in AccountToken table:
class AccountToken /** * @ORMManyToOne(targetEntity="AppEntityTypes") * @ORMJoinColumn(name="type_id", referencedColumnName="id", nullable=false) */ protected $type;
It’s a tricky one for me because I have to relations.
Does someone know how to pull the results:
“Return me posts which have the type=’success’ value”.
$this->createQueryBuilder('p') ->select('p') ->join('AppEntityAccountToken', 'at', ExprJoin::WITH, 'at.uuid = p.accountTokenId') ->join('AppEntityChannelType', 'ct', ExprJoin::WITH, 'ct.id = at.type') ->where('p.accountTokenId = :accountTokenId') ->setParameter('successStatus', Types::STATUS_SUCCESS) ->getQuery() ->getResult();
This is my draft of how I am trying to accomplish it but as I am new with Doctrine, don’t have an idea how to join a table that has value in its related table. It’s confusing.
Advertisement
Answer
Firstly you don’t have any parameter successStatus
in your query.
I think you over complicate the things.
return $this->createQueryBuilder('p') ->leftJoin('p.accountToken', 'a') ->leftJoin('a.type', 'ct') ->where('ct.successStatus = :successStatus') ->setParameter('successStatus', Types::STATUS_SUCCESS) ->getQuery() ->getResult() ;