QueryBuilderまたはDQLの使用中に問題が発生しました。Symfony2/Doctrine SQLでJOINを使用する
私は次のような関係があります。私はDQLをしたいと思いN->ルート
:
ユーザー< -1:N->プロフィール< -n:M->するRouteGroup < -1を特定のユーザーがアクセスするすべてのルートを一覧表示します。 私は、次のコードで、この情報を得ることができます。私はこのコードを使用傾ける明白な理由のために
$usr = $this->container->get('security.context')->getToken()->getUser();
foreach ($usr->getProfiles() as $profile){
foreach ($profile->getRoutegroups() as $routegroup){
var_dump($routegroup->getRoutes()->toArray());
}
}
、そうでない場合、私は私のサーバーが過負荷になり、LOL。
私は、次のアプローチを試してみました:
DQL:
$em->createQuery('SELECT p FROM CRMCoreBundle:User u
JOIN CRMCoreBundle:Profile p
JOIN CRMCoreBundle:RoleGroup rg
JOIN CRMCoreBundle:Role r
WHERE
u.id=:user')
->setParameter('user', $user->getId())
->getResult();
QueryBuilder(私はu.profilesを使用してみました - 代わりに、実体の関係の名前を - しかし、これも動作しませんでした)。
誰かがお手伝いできますか?
UPDATE:私はゼリコのソリューションを試してみましたが、このスクリプトを作っ:
return $this->getEntityManager()
->createQueryBuilder()
->select('u, r')
->from('CRMCoreBundle:User', 'u')
->innerJoin('u.profiles','p')
->innerJoin('p.routegroups','rg')
->innerJoin('rg.routes','r')
->where('u.id = :user_id')->setParameter('user_id', $user->getId())
->getQuery()
->getResult();
をしかし、私はこのエラーを得た:私は、「変更した場合は
The parent object of entity result with alias 'r' was not found. The parent alias is 'rg'.
を - >選択します( 'U、R'
あなたのDQLで[Semantical Error] line 0, col -1 near 'SELECT r FROM': Error: Cannot select entity through identification variables without choosing at least one root entity alias.
あなたのアップデートに答えるには、uとrを選択するだけではいけません。rへの道に沿ってすべてが選択されなければなりません。あなたはselect( 'u、p、rg、r')が必要です – intrepion