php – 与querybuilder“一对多”关系的Doctrine innerjoin
发布时间:2020-12-13 21:46:07 所属栏目:PHP教程 来源:网络整理
导读:我有跟随ER,我需要使用查询生成器在Symfony2-Doctrine中执行以下查询(仅在请求特定过滤器时使用连接) SELECT *FROM `session` INNER JOIN `goal` ON (`session`.`id` = `goal`.`session_id`)WHERE `goal`.`name` = 'Background Dx' AND `session`.`gsite_id`
我有跟随ER,我需要使用查询生成器在Symfony2-Doctrine中执行以下查询(仅在请求特定过滤器时使用连接)
SELECT * FROM `session` INNER JOIN `goal` ON (`session`.`id` = `goal`.`session_id`) WHERE `goal`.`name` = 'Background Dx' AND `session`.`gsite_id` = '66361836' 目标宣言 /** .... * * @ORMTable(name="goal") * @ORMEntity */ class Goal { ... /** * @var Session * * @ORMManyToOne(targetEntity="Session") * @ORMJoinColumns({ * @ORMJoinColumn(name="session_id",referencedColumnName="id") * }) */ private $session; ... } 会话类不包含对目标的任何引用 通过阅读在线文档,似乎学说要求在实体会话上存在列以执行请求的连接.是真的如此,还是有另一种方式? 我的QueryBuilder $rep = $this->em->getRepository(Session::repositoryName); $qb = $rep->createQueryBuilder("s"); $qb->setMaxResults(50); //site if ($params->site != null){ /** @var Gsite **/ $site = $params->site; $qb->andWhere($qb->expr()->eq("s.site",":site"))->setParameter("site",$site); } if (isset($params->goalName)){ ///SOMETHING .... ... ... } $query = $qb->getQuery(); $paginator = new Paginator($query); return $paginator; 解决方法
您不需要从Session到Goal的引用来执行连接.但是,Doctrine不会知道将目标数据映射到Session对象(所以你不会得到它).
$qb->innerJoin('YouYourBundleEntityGoal','g',ExprJoin::WITH,'s.id = g.session') ->where('g.name = :goalName')->andWhere('s.gsiteId = :gsiteId') ->setParameter('goalName','Background Dx')->setParameter('gsiteId','66361836'); 希望我能正确理解你的问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |