You are here

protected function SearchApiSolrBackend::hasHierarchicalProperties in Search API Solr 8

Same name and namespace in other branches
  1. 8.3 src/Plugin/search_api/backend/SearchApiSolrBackend.php \Drupal\search_api_solr\Plugin\search_api\backend\SearchApiSolrBackend::hasHierarchicalProperties()
  2. 8.2 src/Plugin/search_api/backend/SearchApiSolrBackend.php \Drupal\search_api_solr\Plugin\search_api\backend\SearchApiSolrBackend::hasHierarchicalProperties()
  3. 4.x src/Plugin/search_api/backend/SearchApiSolrBackend.php \Drupal\search_api_solr\Plugin\search_api\backend\SearchApiSolrBackend::hasHierarchicalProperties()

Checks if hierarchical properties are nested on an entity-typed property.

Parameters

\Drupal\Core\Entity\TypedData\EntityDataDefinitionInterface $property: The property to be searched for hierarchical nested properties.

Return value

bool

See also

\Drupal\search_api\Plugin\search_api\processor\AddHierarchy::findHierarchicalProperties()

1 call to SearchApiSolrBackend::hasHierarchicalProperties()
SearchApiSolrBackend::isHierarchicalField in src/Plugin/search_api/backend/SearchApiSolrBackend.php
Checks if a field is (potentially) hierarchical.

File

src/Plugin/search_api/backend/SearchApiSolrBackend.php, line 1254

Class

SearchApiSolrBackend
Apache Solr backend for search api.

Namespace

Drupal\search_api_solr\Plugin\search_api\backend

Code

protected function hasHierarchicalProperties(EntityDataDefinitionInterface $property) {
  $entity_type_id = $property
    ->getEntityTypeId();

  // Check properties for potential hierarchy. Check two levels down, since
  // Core's entity references all have an additional "entity" sub-property for
  // accessing the actual entity reference, which we'd otherwise miss.
  foreach ($this->fieldsHelper
    ->getNestedProperties($property) as $name_2 => $property_2) {
    $property_2 = $this->fieldsHelper
      ->getInnerProperty($property_2);
    if ($property_2 instanceof EntityDataDefinitionInterface) {
      if ($property_2
        ->getEntityTypeId() == $entity_type_id) {
        return TRUE;
      }
    }
    elseif ($property_2 instanceof ComplexDataDefinitionInterface) {
      foreach ($property_2
        ->getPropertyDefinitions() as $property_3) {
        $property_3 = $this->fieldsHelper
          ->getInnerProperty($property_3);
        if ($property_3 instanceof EntityDataDefinitionInterface) {
          if ($property_3
            ->getEntityTypeId() == $entity_type_id) {
            return TRUE;
          }
        }
      }
    }
  }
  return FALSE;
}