diff --git a/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/ValidReferenceConstraintValidator.php b/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/ValidReferenceConstraintValidator.php index 86ecf4d..8f704c1 100644 --- a/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/ValidReferenceConstraintValidator.php +++ b/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/ValidReferenceConstraintValidator.php @@ -24,6 +24,9 @@ public function validate($value, Constraint $constraint) { if (!isset($value)) { return; } + // We don't use a regular NotNull constraint for the target_id property as + // a NULL value is valid if the entity property contains an unsaved entity. + // @see \Drupal\Core\TypedData\DataReferenceTargetDefinition::getConstraints if (!$value->isEmpty() && $value->target_id === NULL && !$value->entity->isNew()) { $this->context->addViolation($constraint->nullMessage); return; diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php index d1b2a56..18c0506 100644 --- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php +++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php @@ -227,7 +227,10 @@ public function onChange($property_name, $notify = TRUE) { */ public function isEmpty() { // Avoid loading the entity by first checking the 'target_id'. - if ($this->target_id !== NULL || (($entity = $this->entity) && $entity instanceof EntityInterface)) { + if ($this->target_id !== NULL) { + return FALSE; + } + if ($this->entity && $this->entity instanceof EntityInterface) { return FALSE; } return TRUE; diff --git a/core/lib/Drupal/Core/TypedData/DataReferenceTargetDefinition.php b/core/lib/Drupal/Core/TypedData/DataReferenceTargetDefinition.php index d97b999..b360986 100644 --- a/core/lib/Drupal/Core/TypedData/DataReferenceTargetDefinition.php +++ b/core/lib/Drupal/Core/TypedData/DataReferenceTargetDefinition.php @@ -1,7 +1,7 @@