/**
* @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);
}