private function mediaObjectToArray(Media $media) { $mediaArray = null; if ($media->getId()) { if (!$this->advertisement) { $this->advertisement = new Advertisement(); $this->advertisement->setInstitution($this->institution); } $mediaArray = array('id' => $media->getId(), 'uuid' => $media->getUuid(), 'name' => $media->getName(), 'caption' => $media->getCaption()); } return $mediaArray; }
private function updateAdvertisementDenormalizedData(Advertisement $advertisement) { $data['id'] = $advertisement->getId(); $data['institution_id'] = $advertisement->getInstitution()->getId(); $data['advertisement_type_id'] = $advertisement->getAdvertisementType()->getId(); $data['title'] = $advertisement->getTitle(); $data['description'] = $advertisement->getDescription(); $data['date_created'] = $advertisement->getDateCreated() ? $advertisement->getDateCreated()->format('Y-m-d H:i:s') : 'now()'; $data['date_expiry'] = $advertisement->getDateExpiry()->format('Y-m-d H:i:s'); $data['status'] = $advertisement->getStatus(); // TODO - Enhance Saving Process. This can be done in 1 foreach. $collectionClasses = array(); foreach ($advertisement->getAdvertisementPropertyValues() as $each) { $property = $each->getAdvertisementPropertyName(); if ($property->getDataType()->getColumnType() == 'collection') { $data[$property->getName()][] = (int) $each->getValue(); $collectionClasses[$property->getName()] = $property->getDataClass(); } else { $data[$property->getName()] = $each->getValue(); } } $onDuplicatePlaceholder = $columns = $valuesPlaceholder = ''; foreach ($data as $key => $value) { if (is_array($value)) { if (empty($value)) { $data[$key] = ''; continue; } if (!$collectionClasses[$key]) { throw AdvertisementPropertyException::emptyPropertyClass($key); } $qb = $this->em->createQueryBuilder(); $query = $qb->select('a')->from($collectionClasses[$key], 'a')->where($qb->expr()->in('a.id', $value)); $data[$key] = json_encode($query->getQuery()->getResult(Query::HYDRATE_ARRAY)); } $columns .= ",{$key}"; $valuesPlaceholder .= ",:{$key}"; $onDuplicatePlaceholder .= ",{$key} = :{$key}"; } $columns = substr($columns, 1); $valuesPlaceholder = substr($valuesPlaceholder, 1); $onDuplicatePlaceholder = substr($onDuplicatePlaceholder, 1); $query = "INSERT INTO advertisement_denormalized_properties ({$columns}) VALUES({$valuesPlaceholder}) ON DUPLICATE KEY UPDATE {$onDuplicatePlaceholder}"; $result = $this->em->getConnection()->executeQuery($query, $data); }