From ed07303703842032b01602d040c7fafd49435be2 Mon Sep 17 00:00:00 2001 From: Steve Boyd Date: Tue, 27 Jun 2023 19:46:29 +1200 Subject: [PATCH] ENH Cache $item->ID for eager loading --- src/ORM/DataList.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/ORM/DataList.php b/src/ORM/DataList.php index a2ec43de2..54f699049 100644 --- a/src/ORM/DataList.php +++ b/src/ORM/DataList.php @@ -928,6 +928,8 @@ class DataList extends ViewableData implements SS_List, Filterable, Sortable, Li private function setDataObjectEagerLoadedData(DataObject $item): void { + // cache $item->ID at the top of this method to reduce calls to ViewableData::__get() + $itemID = $item->ID; foreach (array_keys($this->eagerLoadedData) as $eagerLoadRelation) { list($dataClasses, $relations) = $this->getEagerLoadVariables($eagerLoadRelation); $dataClass = $dataClasses[count($dataClasses) - 2]; @@ -935,7 +937,7 @@ class DataList extends ViewableData implements SS_List, Filterable, Sortable, Li foreach (array_keys($this->eagerLoadedData[$eagerLoadRelation]) as $eagerLoadID) { $eagerLoadedData = $this->eagerLoadedData[$eagerLoadRelation][$eagerLoadID][$relation]; if ($dataClass === $dataClasses[0]) { - if ($eagerLoadID === $item->ID) { + if ($eagerLoadID === $itemID) { $item->setEagerLoadedData($relation, $eagerLoadedData); } } elseif ($dataClass === $dataClasses[1]) {