From de6d2982a960cc5f4657c14a1b03977a4fecff74 Mon Sep 17 00:00:00 2001 From: Ingolf Steinhardt Date: Sun, 5 Aug 2018 11:14:44 +0200 Subject: [PATCH] Hotfix bottle neck 2 #1153 MetaModels.php --- src/MetaModels/MetaModel.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/MetaModels/MetaModel.php b/src/MetaModels/MetaModel.php index 66b91d2d0..e7564a90f 100644 --- a/src/MetaModels/MetaModel.php +++ b/src/MetaModels/MetaModel.php @@ -21,6 +21,7 @@ * @author Chris Raidler * @author David Molineus * @author Sven Baumann + * @author Ingolf Steinhardt * @copyright 2012-2018 The MetaModels team. * @license https://github.com/MetaModels/core/blob/master/LICENSE LGPL-3.0-or-later * @filesource @@ -76,6 +77,13 @@ class MetaModel implements IMetaModel */ protected $serviceContainer; + /** + * The cache existing ids. + * + * @var array + */ + private $existingIds = []; + /** * Instantiate a MetaModel. * @@ -722,6 +730,11 @@ public function getIdsFromFilter($objFilter, $strSortBy = '', $intOffset = 0, $i } elseif ('id' === $strSortBy) { asort($arrFilteredIds); } elseif (in_array($strSortBy, array('pid', 'tstamp', 'sorting'))) { + // Check existing ids. + if (array_intersect($arrFilteredIds, $this->existingIds) == $arrFilteredIds) { + return $arrFilteredIds; + } + // Sort by database values. $arrFilteredIds = $this ->getDatabase() @@ -736,6 +749,8 @@ public function getIdsFromFilter($objFilter, $strSortBy = '', $intOffset = 0, $i ) ->execute($arrFilteredIds) ->fetchEach('id'); + + $this->existingIds = array_merge($this->existingIds, $arrFilteredIds); } elseif ($strSortBy == 'random') { shuffle($arrFilteredIds); }