From c34ef254b7d4f44c1751b8b9cde40a4bad67ccf0 Mon Sep 17 00:00:00 2001 From: Sebastian Marcet Date: Mon, 10 Oct 2016 17:26:34 -0300 Subject: [PATCH] Moderators query bug the moderators query was doing inner join with presentations, so if was returning the wrong moderators resulset. Change-Id: I39ac3076e5b475289d3b5b57e523a3fb816aa9b7 --- app/Models/Foundation/Summit/Summit.php | 33 +++++++++++++++------- app/Models/Utils/SilverstripeBaseModel.php | 8 ++++++ 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/app/Models/Foundation/Summit/Summit.php b/app/Models/Foundation/Summit/Summit.php index 31ba736c..5bc46d91 100644 --- a/app/Models/Foundation/Summit/Summit.php +++ b/app/Models/Foundation/Summit/Summit.php @@ -13,6 +13,7 @@ **/ use Doctrine\Common\Collections\Criteria; +use Doctrine\ORM\Query\ResultSetMappingBuilder; use models\main\File; use models\main\Member; use models\utils\SilverstripeBaseModel; @@ -670,15 +671,27 @@ class Summit extends SilverstripeBaseModel /** * @return \Doctrine\ORM\QueryBuilder */ - private function buildModeratorsQuery(){ - return $this->createQueryBuilder() - ->select('distinct ps') - ->from('models\summit\PresentationSpeaker','ps') - ->join('ps.presentations','p') - ->join('p.summit','s') - ->join('p.moderator','m') - ->where('s.id = :summit_id and p.published = 1 and m.id = ps.id') - ->setParameter('summit_id', $this->getId()); + private function buildModeratorsQuery() + { + $query = <<getId()} AND Published = 1 +) +SQL; + $rsm = new ResultSetMappingBuilder($this->getEM()); + $rsm->addRootEntityFromClassMetadata(\models\summit\PresentationSpeaker::class, 's', []); + // build rsm here + $native_query = $this->getEM()->createNativeQuery($query, $rsm); + return $native_query; } /** @@ -699,7 +712,7 @@ class Summit extends SilverstripeBaseModel */ public function getSpeakers(){ // moderators - $moderators = $this->buildModeratorsQuery()->getQuery()->getResult(); + $moderators = $this->buildModeratorsQuery()->getResult(); // get moderators ids to exclude from speakers $moderators_ids = array(); foreach($moderators as $m){ diff --git a/app/Models/Utils/SilverstripeBaseModel.php b/app/Models/Utils/SilverstripeBaseModel.php index d011292b..1a00be2e 100644 --- a/app/Models/Utils/SilverstripeBaseModel.php +++ b/app/Models/Utils/SilverstripeBaseModel.php @@ -12,6 +12,7 @@ * limitations under the License. **/ +use Doctrine\ORM\EntityManager; use Doctrine\ORM\Mapping AS ORM; use Doctrine\ORM\NativeQuery; use Doctrine\ORM\Query; @@ -118,5 +119,12 @@ class SilverstripeBaseModel implements IEntity return Registry::getManager(self::EntityManager)->getConnection()->prepare($sql); } + /** + * @return EntityManager + */ + protected function getEM(){ + return Registry::getManager(self::EntityManager); + } + const EntityManager = 'ss'; } \ No newline at end of file