/** * @param Property $property * * @param Relationship\HasMany $relationship micro-optimalization * @param Filtering|null $targetTableFiltering * @param Filtering|null $relTableFiltering * @return Entity[] * @throws InvalidValueException */ private function getHasManyValue(Property $property, Relationship\HasMany $relationship, Filtering $targetTableFiltering = null, Filtering $relTableFiltering = null) { $targetTable = $relationship->getTargetTable(); $columnReferencingTargetTable = $relationship->getColumnReferencingTargetTable(); $rows = $this->row->referencing($relationship->getRelationshipTable(), $relationship->getColumnReferencingSourceTable(), $relTableFiltering, $relationship->getStrategy()); $value = []; foreach ($rows as $row) { $valueRow = $row->referenced($targetTable, $columnReferencingTargetTable, $targetTableFiltering); if ($valueRow !== null) { $entityClass = $this->mapper->getEntityClass($targetTable, $valueRow); $entity = $this->entityFactory->createEntity($entityClass, $valueRow); $this->checkConsistency($property, $entityClass, $entity); $entity->makeAlive($this->entityFactory); $value[] = $entity; } } return $this->entityFactory->createCollection($value); }