From a1364815b7f2576226efec0a47a730f46e937429 Mon Sep 17 00:00:00 2001 From: Mohamed Abbas Date: Mon, 16 Dec 2024 20:18:43 +0530 Subject: [PATCH] 38934 slow processing attribute table source_model --- .../Model/Entity/Attribute/Source/Table.php | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/app/code/Magento/Eav/Model/Entity/Attribute/Source/Table.php b/app/code/Magento/Eav/Model/Entity/Attribute/Source/Table.php index b9139c6fff0ff..a11ede7ac37be 100644 --- a/app/code/Magento/Eav/Model/Entity/Attribute/Source/Table.php +++ b/app/code/Magento/Eav/Model/Entity/Attribute/Source/Table.php @@ -103,19 +103,25 @@ public function getAllOptions($withEmpty = true, $defaultValues = false) * @param bool $withEmpty Add empty option to array * @return array */ - public function getSpecificOptions($ids, $withEmpty = true) + public function getSpecificOptions($ids, $withEmpty = true) { - $options = $this->_attrOptionCollectionFactory->create() - ->setPositionOrder('asc') - ->setAttributeFilter($this->getAttribute()->getId()) - ->addFieldToFilter('main_table.option_id', ['in' => $ids]) - ->setStoreFilter($this->getAttribute()->getStoreId()) - ->load() - ->toOptionArray(); + $allOptions = $this->getAllOptions(false); + $specificOptions = []; + if (is_string($ids) && strpos($ids, ',') !== false) { + $ids = explode(',', $ids); + } + if (!is_array($ids)) { + $ids = (array)$ids; + } + foreach ($allOptions as $option) { + if (isset($option['value']) && in_array($option['value'], $ids)) { + $specificOptions[] = $option; + } + } if ($withEmpty) { - $options = $this->addEmptyOption($options); + $specificOptions = $this->addEmptyOption($specificOptions); } - return $options; + return $specificOptions; } /**