Doctrine2リポジトリクラスにQueryBuilderを受け取り、いくつかの追加句を追加するメソッドを作成したいと思います。そのうちの1つは内部結合です。
クエリビルダーをインスタンス化するために使用されたテーブルエイリアスを見つけるにはどうすればよいですか?これは発見可能なものですか、それともコードベース全体の規則である必要がありますか(したがって、潜在的なバグの原因)?
私のクライアントコードは次のとおりです。
public function getPasswordAction($id)
{
$user = $this->get('security.context')->getToken()->getUser();
$repository = $this->getDoctrine()
->getRepository('TenKPwLockerBundle:Password');
$query = $repository->createQueryBuilder('p')
->where('id = :id')
->setParameter('id', $id);
$query = $repository->userCanReadRestriction($query, $user);
...
私のリポジトリクラスには次のものが含まれています。
public function userCanReadRestriction(\Doctrine\ORM\QueryBuilder $builder, \TenK\UserBundle\Entity\User $user)
{
// where can I get 'p' from?
return $builder->innerJoin('p.shares', 's')
->where('createdBy = :creator')
->orWhere('s.toUser = :toId')
->setParameters(array('creator' => $user, 'toUser' => $user));
}
実際、上記のコードで、QueryBuilderがパスワードエンティティとまったく連携していることを確認するにはどうすればよいですか?