/** * @param string $entityClass * @param array $fieldsDefinition * @param array $filterFieldsConfig */ protected function filterAssociations($entityClass, &$fieldsDefinition, &$filterFieldsConfig) { $metadata = $this->doctrineHelper->getEntityMetadataForClass($entityClass); $associationsMapping = $metadata->getAssociationMappings(); foreach ($associationsMapping as $fieldName => $mapping) { $identifierFieldNames = $this->doctrineHelper->getEntityIdentifierFieldNamesForClass($mapping['targetEntity']); if (!isset($filterFieldsConfig[$fieldName]) || (!isset($fieldsDefinition[$fieldName][ConfigUtil::DEFINITION][ConfigUtil::FIELDS]) || !is_array($fieldsDefinition[$fieldName][ConfigUtil::DEFINITION][ConfigUtil::FIELDS]))) { continue; } $associationAllowedFields = $filterFieldsConfig[$fieldName]; foreach ($fieldsDefinition[$fieldName][ConfigUtil::DEFINITION][ConfigUtil::FIELDS] as $name => &$def) { if (in_array($name, $identifierFieldNames, true)) { continue; } if (!in_array($name, $associationAllowedFields, true) && !ConfigUtil::isMetadataProperty($name)) { if (is_array($def)) { $def = array_merge($def, [ConfigUtil::EXCLUDE => true]); } else { $def = [ConfigUtil::EXCLUDE => true]; } } } } }
/** * @param Channel $channel * @param array $ids * @return \ArrayIterator|BufferedQueryResultIterator */ protected function getEntityIdsByChannel(Channel $channel, array $ids = []) { $entityFQCN = $channel->getCustomerIdentity(); $qb = $this->doctrineHelper->getEntityRepository($entityFQCN)->createQueryBuilder('e'); $metadata = $this->doctrineHelper->getEntityMetadataForClass($entityFQCN); $metrics = []; foreach ($this->providers as $provider) { if ($provider->supports($channel) && $metadata->hasField($provider->getType())) { $metrics[] = $provider->getType(); } } if (count($metrics) === 0) { return new \ArrayIterator(); } $idField = sprintf('e.%s', $this->doctrineHelper->getSingleEntityIdentifierFieldName($entityFQCN)); $qb->select(preg_filter('/^/', 'e.', $metrics))->addSelect($idField . ' as id')->where('e.dataChannel = :dataChannel')->orderBy($qb->expr()->asc($idField))->setParameter('dataChannel', $channel); if (count($ids) !== 0) { $qb->andWhere($qb->expr()->in($idField, ':ids'))->setParameter('ids', $ids); } return (new BufferedQueryResultIterator($qb))->setBufferSize(self::BATCH_SIZE); }
public function testGetEntityMetadataForClassNotManageableEntityWithoutThrowException() { $class = 'ItemStub'; $this->registry->expects($this->once())->method('getManagerForClass')->with($class)->will($this->returnValue(null)); $this->assertNull($this->doctrineHelper->getEntityMetadataForClass($class, false)); }