one to many 或者many to many 的 eager fetch

如果你想不要让doctrine 为每一个related one to many 或者many to many 生成一个sql的话,只能直接写DQL 比如:

        $qb=$em->getRepository('AcmeBannieresBundle:TVille')->createQueryBuilder('tv');
        $qb->leftJoin('tv.codep', 'cp')
        ->leftJoin('tv.departement', 'dep')
        ->where('dep.code = :codep')
        ->setParameter('codep', $codep);
        $cities=$qb->getQuery()->execute();
是不行的,每次你要读codep的时候它都要query一把,dql可以解决这一点:
        $query=$em->createQuery('SELECT tv,cp  FROM AcmeBannieresBundle:TVille tv LEFT JOIN tv.codep cp LEFT JOIN tv.departement dep WHERE dep.code= :codep')
        ->setParameter('codep', $codep);
        $cities=$query->getResult();
这个就只执行一个sql。

评论

热门帖子