diff --git a/src/Plugin/GraphQL/DataProducer/Entity/EntityLoad.php b/src/Plugin/GraphQL/DataProducer/Entity/EntityLoad.php index 408af0afd..b6f9d8d85 100644 --- a/src/Plugin/GraphQL/DataProducer/Entity/EntityLoad.php +++ b/src/Plugin/GraphQL/DataProducer/Entity/EntityLoad.php @@ -172,8 +172,10 @@ public function resolve($type, $id, ?string $language, ?array $bundles, ?bool $a // Get the correct translation. if (isset($language) && $language !== $entity->language()->getId() && $entity instanceof TranslatableInterface) { - $entity = $entity->getTranslation($language); - $entity->addCacheContexts(["static:language:{$language}"]); + if ($entity->hasTranslation($language)) { + $entity = $entity->getTranslation($language); + $entity->addCacheContexts(["static:language:{$language}"]); + } } // Check if the passed user (or current user if none is passed) has access diff --git a/src/Plugin/GraphQL/DataProducer/Entity/EntityLoadByUuid.php b/src/Plugin/GraphQL/DataProducer/Entity/EntityLoadByUuid.php index a400da191..4fb1d8d74 100644 --- a/src/Plugin/GraphQL/DataProducer/Entity/EntityLoadByUuid.php +++ b/src/Plugin/GraphQL/DataProducer/Entity/EntityLoadByUuid.php @@ -165,8 +165,10 @@ public function resolve($type, $uuid, ?string $language, ?array $bundles, ?bool // Get the correct translation. if (isset($language) && $language != $entity->language()->getId() && $entity instanceof TranslatableInterface) { - $entity = $entity->getTranslation($language); - $entity->addCacheContexts(["static:language:{$language}"]); + if ($entity->hasTranslation($language)) { + $entity = $entity->getTranslation($language); + $entity->addCacheContexts(["static:language:{$language}"]); + } } // Check if the passed user (or current user if none is passed) has access diff --git a/src/Plugin/GraphQL/DataProducer/Entity/EntityLoadMultiple.php b/src/Plugin/GraphQL/DataProducer/Entity/EntityLoadMultiple.php index 2b456aadf..92f2c898d 100644 --- a/src/Plugin/GraphQL/DataProducer/Entity/EntityLoadMultiple.php +++ b/src/Plugin/GraphQL/DataProducer/Entity/EntityLoadMultiple.php @@ -172,8 +172,10 @@ public function resolve($type, array $ids, ?string $language, ?array $bundles, b } if (isset($language) && $language !== $entities[$id]->language()->getId() && $entities[$id] instanceof TranslatableInterface) { - $entities[$id] = $entities[$id]->getTranslation($language); - $entities[$id]->addCacheContexts(["static:language:{$language}"]); + if ($entities[$id]->hasTranslation($language)) { + $entities[$id] = $entities[$id]->getTranslation($language); + $entities[$id]->addCacheContexts(["static:language:{$language}"]); + } } if ($access) { diff --git a/src/Plugin/GraphQL/DataProducer/Entity/EntityTranslation.php b/src/Plugin/GraphQL/DataProducer/Entity/EntityTranslation.php index 1a30c65dc..5d3f1268c 100644 --- a/src/Plugin/GraphQL/DataProducer/Entity/EntityTranslation.php +++ b/src/Plugin/GraphQL/DataProducer/Entity/EntityTranslation.php @@ -103,7 +103,7 @@ public function __construct(array $configuration, $pluginId, $pluginDefinition, * @return \Drupal\Core\Entity\EntityInterface|null */ public function resolve(EntityInterface $entity, $language, ?bool $access, ?AccountInterface $accessUser, ?string $accessOperation, FieldContext $context) { - if ($entity instanceof TranslatableInterface && $entity->isTranslatable()) { + if ($entity instanceof TranslatableInterface && $entity->isTranslatable() && $entity->hasTranslation($language)) { $entity = $entity->getTranslation($language); $entity->addCacheContexts(["static:language:{$language}"]); // Check if the passed user (or current user if none is passed) has access diff --git a/src/Plugin/GraphQL/DataProducer/Routing/RouteEntity.php b/src/Plugin/GraphQL/DataProducer/Routing/RouteEntity.php index e08c7bddd..46c64bbb8 100644 --- a/src/Plugin/GraphQL/DataProducer/Routing/RouteEntity.php +++ b/src/Plugin/GraphQL/DataProducer/Routing/RouteEntity.php @@ -126,8 +126,10 @@ public function resolve($url, ?string $language, FieldContext $context): ?Deferr // Get the correct translation. if (isset($language) && $language != $entity->language()->getId() && $entity instanceof TranslatableInterface) { - $entity = $entity->getTranslation($language); - $entity->addCacheContexts(["static:language:{$language}"]); + if ($entity->hasTranslation($language)) { + $entity = $entity->getTranslation($language); + $entity->addCacheContexts(["static:language:{$language}"]); + } } $access = $entity->access('view', NULL, TRUE); diff --git a/src/Plugin/GraphQL/DataProducer/Taxonomy/TaxonomyLoadTree.php b/src/Plugin/GraphQL/DataProducer/Taxonomy/TaxonomyLoadTree.php index 3f2229fd7..b0753acfa 100644 --- a/src/Plugin/GraphQL/DataProducer/Taxonomy/TaxonomyLoadTree.php +++ b/src/Plugin/GraphQL/DataProducer/Taxonomy/TaxonomyLoadTree.php @@ -175,8 +175,10 @@ public function resolve(string $vid, int $parent, ?int $max_depth, ?string $lang $context->addCacheableDependency($entities[$id]); if (isset($language) && $language !== $entities[$id]->language()->getId() && $entities[$id] instanceof TranslatableInterface) { - $entities[$id] = $entities[$id]->getTranslation($language); - $entities[$id]->addCacheContexts(["static:language:{$language}"]); + if ($entities[$id]->hasTranslation($language)) { + $entities[$id] = $entities[$id]->getTranslation($language); + $entities[$id]->addCacheContexts(["static:language:{$language}"]); + } } if ($access) {