3 namespace Drupal\Driver\Fields\Drupal8;
6 * Entity Reference field handler for Drupal 8.
8 class EntityReferenceHandler extends AbstractHandler {
13 public function expand($values) {
15 $entity_type_id = $this->fieldInfo->getSetting('target_type');
16 $entity_definition = \Drupal::entityManager()->getDefinition($entity_type_id);
17 $label_key = $entity_definition->getKey('label');
19 // Determine target bundle restrictions.
20 $target_bundle_key = NULL;
21 if (!$target_bundles = $this->getTargetBundles()) {
22 $target_bundle_key = $entity_definition->getKey('bundle');
25 foreach ($values as $value) {
26 $query = \Drupal::entityQuery($entity_type_id)->condition($label_key, $value);
27 if ($target_bundles && $target_bundle_key) {
28 $query->condition($target_bundle_key, $target_bundles, 'IN');
30 if ($entities = $query->execute()) {
31 $return[] = array_shift($entities);
34 throw new \Exception(sprintf("No entity '%s' of type '%s' exists.", $value, $entity_type_id));
41 * Retrieves bundles for which the field is configured to reference.
44 * Array of bundle names, or NULL if not able to determine bundles.
46 protected function getTargetBundles() {
47 $settings = $this->fieldConfig->getSettings();
48 if (!empty($settings['handler_settings']['target_bundles'])) {
49 return $settings['handler_settings']['target_bundles'];