/** * @param array $associationMapping * @param array $entityIds * @param array $config * * @return Query */ protected function getRelatedItemsIdsQuery($associationMapping, $entityIds, $config) { $qb = $this->getToManyAssociationQueryBuilder($associationMapping, $entityIds)->addSelect(sprintf('r.%s as relatedEntityId', $this->doctrineHelper->getEntityIdFieldName($associationMapping['targetEntity']))); return $this->getQuery($qb, $config); }
/** * @param array $result * @param string $entityClass * @param array $relatedData [field => [entityId => [field => value, ...], ...], ...] * * @throws \RuntimeException */ protected function applyRelatedData(array &$result, $entityClass, $relatedData) { $entityIdFieldName = $this->doctrineHelper->getEntityIdFieldName($entityClass); foreach ($result as &$resultItem) { if (!array_key_exists($entityIdFieldName, $resultItem)) { throw new \RuntimeException(sprintf('The result item does not contain the entity identifier. Entity: %s.', $entityClass)); } $entityId = $resultItem[$entityIdFieldName]; foreach ($relatedData as $field => $relatedItems) { $resultItem[$field] = []; if (!empty($relatedItems[$entityId])) { foreach ($relatedItems[$entityId] as $relatedItem) { $resultItem[$field][] = $relatedItem; } } } } }