From e17dbf10486e1a397fe2586c7ab002fc28167191 Mon Sep 17 00:00:00 2001 From: Loz Calver Date: Mon, 21 Aug 2023 16:38:48 +0100 Subject: [PATCH] FIX: Save repeated database queries to fetch elemental area name (fixes #928) --- src/Models/BaseElement.php | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/Models/BaseElement.php b/src/Models/BaseElement.php index 49b816ee..a3f89c22 100644 --- a/src/Models/BaseElement.php +++ b/src/Models/BaseElement.php @@ -894,16 +894,19 @@ public function getAreaRelationName() $result = 'ElementalArea'; if ($page) { - $has_one = $page->config()->get('has_one'); - $area = $this->Parent(); - - foreach ($has_one as $relationName => $relationClass) { - if ($page instanceof BaseElement && $relationName === 'Parent') { - continue; - } - if ($relationClass === $area->ClassName && $page->{$relationName}()->ID === $area->ID) { - $result = $relationName; - break; + $class = DataObject::getSchema()->hasOneComponent($this, 'Parent'); + $area = $this->ParentID ? DataObject::get_by_id($class, $this->ParentID) : null; + + if ($area) { + $has_one = $page->config()->get('has_one'); + foreach ($has_one as $relationName => $relationClass) { + if ($page instanceof BaseElement && $relationName === 'Parent') { + continue; + } + if ($relationClass === $area->ClassName && $page->{$relationName}()->ID === $area->ID) { + $result = $relationName; + break; + } } } }