diff --git a/core/lib/Drupal/Core/Field/EntityReferenceFieldItemList.php b/core/lib/Drupal/Core/Field/EntityReferenceFieldItemList.php index 0a53d9894a3250ae59f66696536299cc0f858e08..3fa199b7276401e6076f70f210534fa6e6345b14 100644 --- a/core/lib/Drupal/Core/Field/EntityReferenceFieldItemList.php +++ b/core/lib/Drupal/Core/Field/EntityReferenceFieldItemList.php @@ -24,7 +24,7 @@ public function getConstraints() { * {@inheritdoc} */ public function referencedEntities() { - if (empty($this->list)) { + if ($this->isEmpty()) { return []; } diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestComputedField.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestComputedField.php index c873ccc00e293819d5d962007b414ff3c10ab1fb..187effe50456af380502707ad682b24c8ab9abc5 100644 --- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestComputedField.php +++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestComputedField.php @@ -4,6 +4,7 @@ use Drupal\Core\Entity\EntityTypeInterface; use Drupal\Core\Field\BaseFieldDefinition; +use Drupal\entity_test\Plugin\Field\ComputedReferenceTestFieldItemList; use Drupal\entity_test\Plugin\Field\ComputedTestFieldItemList; /** @@ -39,6 +40,12 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) { ->setComputed(TRUE) ->setClass(ComputedTestFieldItemList::class); + $fields['computed_reference_field'] = BaseFieldDefinition::create('entity_reference') + ->setLabel('Computed Reference Field Test') + ->setComputed(TRUE) + ->setSetting('target_type', 'entity_test') + ->setClass(ComputedReferenceTestFieldItemList::class); + return $fields; } diff --git a/core/modules/system/tests/modules/entity_test/src/Plugin/Field/ComputedReferenceTestFieldItemList.php b/core/modules/system/tests/modules/entity_test/src/Plugin/Field/ComputedReferenceTestFieldItemList.php new file mode 100644 index 0000000000000000000000000000000000000000..d28a014f1c620f0018a87727de269e2dedb403eb --- /dev/null +++ b/core/modules/system/tests/modules/entity_test/src/Plugin/Field/ComputedReferenceTestFieldItemList.php @@ -0,0 +1,24 @@ +get('entity_test_reference_computed_target_ids', []) as $delta => $id) { + $this->list[$delta] = $this->createItem($delta, $id); + } + } + +} diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityFieldTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityFieldTest.php index a42a74baae1eded269ba737258095503bdbe62b1..3fd17d86b47798da09b4aa795e4a3663c7b66b10 100644 --- a/core/tests/Drupal/KernelTests/Core/Entity/EntityFieldTest.php +++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityFieldTest.php @@ -16,6 +16,7 @@ use Drupal\Core\TypedData\ListInterface; use Drupal\Core\TypedData\Type\StringInterface; use Drupal\Core\TypedData\TypedDataInterface; +use Drupal\entity_test\Entity\EntityTest; use Drupal\entity_test\Entity\EntityTestComputedField; use Drupal\node\Entity\Node; use Drupal\node\Entity\NodeType; @@ -870,6 +871,32 @@ public function testComputedFields() { $this->assertFalse($computed_item_list1->equals($computed_item_list2)); } + /** + * Tests an entity reference computed field. + */ + public function testEntityReferenceComputedField() { + $this->installEntitySchema('entity_test_computed_field'); + + // Create 2 entities to be referenced. + $ref1 = EntityTest::create(['name' => 'foo', 'type' => 'bar']); + $ref1->save(); + $ref2 = EntityTest::create(['name' => 'baz', 'type' => 'bar']); + $ref2->save(); + \Drupal::state()->set('entity_test_reference_computed_target_ids', [$ref1->id(), $ref2->id()]); + + $entity = EntityTestComputedField::create([]); + $entity->save(); + + /** @var \Drupal\entity_test\Plugin\Field\ComputedReferenceTestFieldItemList $field */ + $field = $entity->get('computed_reference_field'); + /** @var \Drupal\Core\Entity\EntityInterface[] $referenced_entities */ + $referenced_entities = $field->referencedEntities(); + + // Check that ::referencedEntities() is working with computed fields. + $this->assertEquals($ref1->id(), $referenced_entities[0]->id()); + $this->assertEquals($ref2->id(), $referenced_entities[1]->id()); + } + /** * Executes the computed properties tests for the given entity type. *