toRawSQL([ 'first_name' => 'FirstName', 'last_name' => 'LastName', 'email' => 'Email', 'id' => 'ID' ]); if(!empty($where_conditions)) { $extra_filters = " WHERE {$where_conditions}"; $bindings = array_merge($bindings, $filter->getSQLBindings()); } } if(!is_null($order)) { $extra_orders = $order->toRawSQL(array ( 'id' => 'ID', 'email' => 'Email', 'first_name' => 'FirstName', 'last_name' => 'LastName', )); } $query_count = <<getId()} AND PS.PresentationSpeakerID = S.ID ) UNION SELECT S.ID, IFNULL(S.FirstName, M.FirstName) AS FirstName, IFNULL(S.LastName, M.Surname) AS LastName, IFNULL(M.Email, R.Email) AS Email FROM PresentationSpeaker S LEFT JOIN Member M ON M.ID = S.MemberID LEFT JOIN SpeakerRegistrationRequest R ON R.SpeakerID = S.ID WHERE EXISTS ( SELECT E.ID FROM SummitEvent E INNER JOIN Presentation P ON E.ID = P.ID INNER JOIN Presentation_Speakers PS ON PS.PresentationID = P.ID WHERE E.SummitID = {$summit->getId()} AND P.ModeratorID = S.ID ) UNION SELECT S.ID, IFNULL(S.FirstName, M.FirstName) AS FirstName, IFNULL(S.LastName, M.Surname) AS LastName, IFNULL(M.Email, R.Email) AS Email FROM PresentationSpeaker S LEFT JOIN Member M ON M.ID = S.MemberID LEFT JOIN SpeakerRegistrationRequest R ON R.SpeakerID = S.ID WHERE EXISTS ( SELECT A.ID FROM PresentationSpeakerSummitAssistanceConfirmationRequest A WHERE A.SummitID = {$summit->getId()} AND A.SpeakerID = S.ID ) ) SUMMIT_SPEAKERS {$extra_filters} SQL; $stm = $this->_em->getConnection()->executeQuery($query_count, $bindings); $total = intval($stm->fetchColumn(0)); $bindings = array_merge( $bindings, array ( 'per_page' => $paging_info->getPerPage(), 'offset' => $paging_info->getOffset(), )); $query = <<getId()} AND PS.PresentationSpeakerID = S.ID ) UNION SELECT S.ID, S.ClassName, S.Created, S.LastEdited, S.Title AS SpeakerTitle, S.Bio, S.IRCHandle, S.AvailableForBureau, S.FundedTravel, S.Country, S.MemberID, S.WillingToTravel, S.WillingToPresentVideo, S.Notes, S.TwitterName, IFNULL(S.FirstName, M.FirstName) AS FirstName, IFNULL(S.LastName, M.Surname) AS LastName, IFNULL(M.Email,R.Email) AS Email, S.PhotoID FROM PresentationSpeaker S LEFT JOIN Member M ON M.ID = S.MemberID LEFT JOIN SpeakerRegistrationRequest R ON R.SpeakerID = S.ID WHERE EXISTS ( SELECT E.ID FROM SummitEvent E INNER JOIN Presentation P ON E.ID = P.ID INNER JOIN Presentation_Speakers PS ON PS.PresentationID = P.ID WHERE E.SummitID = {$summit->getId()} AND P.ModeratorID = S.ID ) UNION SELECT S.ID, S.ClassName, S.Created, S.LastEdited, S.Title AS SpeakerTitle, S.Bio, S.IRCHandle, S.AvailableForBureau, S.FundedTravel, S.Country, S.MemberID, S.WillingToTravel, S.WillingToPresentVideo, S.Notes, S.TwitterName, IFNULL(S.FirstName, M.FirstName) AS FirstName, IFNULL(S.LastName, M.Surname) AS LastName, IFNULL(M.Email,R.Email) AS Email, S.PhotoID FROM PresentationSpeaker S LEFT JOIN Member M ON M.ID = S.MemberID LEFT JOIN SpeakerRegistrationRequest R ON R.SpeakerID = S.ID WHERE EXISTS ( SELECT A.ID FROM PresentationSpeakerSummitAssistanceConfirmationRequest A WHERE A.SummitID = {$summit->getId()} AND A.SpeakerID = S.ID ) ) SUMMIT_SPEAKERS {$extra_filters} {$extra_orders} limit :per_page offset :offset; SQL; /*$rsm = new ResultSetMapping(); $rsm->addEntityResult(\models\summit\PresentationSpeaker::class, 's'); $rsm->addJoinedEntityResult(\models\main\File::class,'p', 's', 'photo'); $rsm->addJoinedEntityResult(\models\main\Member::class,'m', 's', 'member'); $rsm->addFieldResult('s', 'ID', 'id'); $rsm->addFieldResult('s', 'FirstName', 'first_name'); $rsm->addFieldResult('s', 'LastName', 'last_name'); $rsm->addFieldResult('s', 'Bio', 'last_name'); $rsm->addFieldResult('s', 'SpeakerTitle', 'title' ); $rsm->addFieldResult('p', 'PhotoID', 'id'); $rsm->addFieldResult('p', 'PhotoTitle', 'title'); $rsm->addFieldResult('p', 'PhotoFileName', 'filename'); $rsm->addFieldResult('p', 'PhotoName', 'name'); $rsm->addFieldResult('m', 'MemberID', 'id');*/ $rsm = new ResultSetMappingBuilder($this->_em); $rsm->addRootEntityFromClassMetadata(\models\summit\PresentationSpeaker::class, 's', ['Title' => 'SpeakerTitle']); // build rsm here $native_query = $this->_em->createNativeQuery($query, $rsm); foreach($bindings as $k => $v) $native_query->setParameter($k, $v); $speakers = $native_query->getResult(); $last_page = (int) ceil($total / $paging_info->getPerPage()); return new PagingResponse($total, $paging_info->getPerPage(), $paging_info->getCurrentPage(), $last_page, $speakers); } /** * @param PagingInfo $paging_info * @param Filter|null $filter * @param Order|null $order * @return PagingResponse */ public function getAllByPage(PagingInfo $paging_info, Filter $filter = null, Order $order = null) { $extra_filters = ''; $extra_orders = ''; $bindings = []; if(!is_null($filter)) { $where_conditions = $filter->toRawSQL([ 'first_name' => 'FirstName', 'last_name' => 'LastName', 'email' => 'Email', 'id' => 'ID' ]); if(!empty($where_conditions)) { $extra_filters = " WHERE {$where_conditions}"; $bindings = array_merge($bindings, $filter->getSQLBindings()); } } if(!is_null($order)) { $extra_orders = $order->toRawSQL(array ( 'first_name' => 'FirstName', 'last_name' => 'LastName', 'email' => 'Email', 'id' => 'ID' )); } $query_count = <<_em->getConnection()->executeQuery($query_count, $bindings); $total = intval($stm->fetchColumn(0)); $bindings = array_merge( $bindings, array ( 'per_page' => $paging_info->getPerPage(), 'offset' => $paging_info->getOffset(), )); $query = <<addEntityResult(\models\summit\PresentationSpeaker::class, 's'); $rsm->addJoinedEntityResult(\models\main\File::class,'p', 's', 'photo'); $rsm->addJoinedEntityResult(\models\main\Member::class,'m', 's', 'member'); $rsm->addFieldResult('s', 'ID', 'id'); $rsm->addFieldResult('s', 'FirstName', 'first_name'); $rsm->addFieldResult('s', 'LastName', 'last_name'); $rsm->addFieldResult('s', 'Bio', 'last_name'); $rsm->addFieldResult('s', 'SpeakerTitle', 'title' ); $rsm->addFieldResult('p', 'PhotoID', 'id'); $rsm->addFieldResult('p', 'PhotoTitle', 'title'); $rsm->addFieldResult('p', 'PhotoFileName', 'filename'); $rsm->addFieldResult('p', 'PhotoName', 'name'); $rsm->addFieldResult('m', 'MemberID', 'id');*/ $rsm = new ResultSetMappingBuilder($this->_em); $rsm->addRootEntityFromClassMetadata(\models\summit\PresentationSpeaker::class, 's', ['Title' => 'SpeakerTitle']); // build rsm here $native_query = $this->_em->createNativeQuery($query, $rsm); foreach($bindings as $k => $v) $native_query->setParameter($k, $v); $speakers = $native_query->getResult(); $last_page = (int) ceil($total / $paging_info->getPerPage()); return new PagingResponse($total, $paging_info->getPerPage(), $paging_info->getCurrentPage(), $last_page, $speakers); } /** * @return string */ protected function getBaseEntity() { return PresentationSpeaker::class; } /** * @param Member $member * @return PresentationSpeaker */ public function getByMember(Member $member) { return $this->getEntityManager() ->createQueryBuilder() ->select("s") ->from(PresentationSpeaker::class, "s") ->where("s.member = :member") ->setParameter("member", $member) ->setMaxResults(1) ->getQuery() ->getOneOrNullResult(); } }