/** * Разрешает и возвращает список выбираемых полей. * @param ICollection $collection коллекция * @param IField[] $fields уточняющий список полей * @param IObjectType[] $types уточняющий список типов * @return IField[] */ protected function resolveSelectiveFields(ICollection $collection, array $fields, array $types) { if (!count($fields)) { foreach ($types as $type) { $fields = array_merge($fields, $type->getFields()); } if (!count($fields)) { $fields = $collection->getMetadata()->getFields(); } } foreach ($fields as $fieldName => $field) { if ($field instanceof IRelationField && !$field instanceof BelongsToRelationField) { unset($fields[$fieldName]); } } return array_merge($collection->getForcedFieldsToLoad(), $fields); }