protected function getNecessaryJoins($necessaryEntityNames)
{
$addJoins = [];
// iterate through all field descriptors to find necessary joins
foreach ($this->getAllFields() as $key => $field) {
// if field is in any conditional clause -> add join
if (($field instanceof DoctrineFieldDescriptor || $field instanceof DoctrineJoinDescriptor) && array_search($field->getEntityName(), $necessaryEntityNames) !== false && $field->getEntityName() !== $this->entityName) {
$addJoins = array_merge($addJoins, $field->getJoins());
} else {
// include inner joins
foreach ($field->getJoins() as $entityName => $join) {
if ($join->getJoinMethod() !== DoctrineJoinDescriptor::JOIN_METHOD_INNER && array_search($entityName, $necessaryEntityNames) === false) {
break;
}
$addJoins = array_merge($addJoins, [$entityName => $join]);
}
}
}
return $addJoins;
}