Member info endpoint optimization

optimization of get schedule attendee

Change-Id: I952110db2c571d6700e4e5144ca9df99a1137f04
This commit is contained in:
Sebastian Marcet 2016-09-20 13:49:47 -03:00
parent 68015ac8ae
commit 6fc134ed0c
2 changed files with 19 additions and 4 deletions

View File

@ -14,6 +14,7 @@
use libs\utils\JsonUtils;
use Illuminate\Support\Facades\Config;
use models\summit\SummitAttendee;
/**
* Class SummitAttendeeSerializer
@ -45,10 +46,17 @@ final class SummitAttendeeSerializer extends SilverStripeSerializer
{
if(!count($relations)) $relations = $this->getAllowedRelations();
$attendee = $this->object;
if(!$attendee instanceof SummitAttendee) return [];
$summit = $attendee->getSummit();
$values = parent::serialize($expand, $fields, $relations, $params);
$values['schedule'] = $attendee->getScheduledEventsIds();
$schedule = [];
foreach ($attendee->getScheduledEventsIds() as $event_id){
$schedule[] = intval($event_id);
}
$values['schedule'] = $schedule;
$tickets = array();
foreach($attendee->getTickets() as $t)

View File

@ -245,9 +245,16 @@ class SummitAttendee extends SilverstripeBaseModel
* @return int[]
*/
public function getScheduledEventsIds(){
return $this->schedule->map(function($entity) {
return $entity->getEvent()->getId();
})->toArray();
$sql = <<<SQL
SELECT SummitEventID
FROM SummitAttendee_Schedule
INNER JOIN SummitEvent ON SummitEvent.ID = SummitAttendee_Schedule.SummitEventID
WHERE SummitAttendeeID = :attendee_id AND SummitEvent.Published = 1
SQL;
$stmt = $this->prepareRawSQL($sql);
$stmt->execute(['attendee_id' => $this->getId()]);
return $stmt->fetchAll(\PDO::FETCH_COLUMN);
}
}