protected function fetch(QueryBuilder $builder, $hasJoin, array $values)
{
$values = array_values(array_unique(array_filter($values, function ($value) {
return $value !== null;
})));
if (count($values) === 0) {
return new EntityContainer([]);
}
$primaryKey = $this->targetRepository->getMapper()->getStorageReflection()->getStoragePrimaryKey()[0];
$builder->andWhere('%column IN %any', $primaryKey, $values);
$builder->addSelect(($hasJoin ? 'DISTINCT ' : '') . '%table.*', $builder->getFromAlias());
$result = $this->connection->queryArgs($builder->getQuerySQL(), $builder->getQueryParameters());
$entities = [];
while ($data = $result->fetch()) {
$entity = $this->targetRepository->hydrateEntity($data->toArray());
$entities[$entity->getValue('id')] = $entity;
}
return new EntityContainer($entities);
}