6 declare(strict_types=1);
11 use Magento\Bundle\Model\ResourceModel\Selection\CollectionFactory;
23 private $linkCollectionFactory;
33 private $optionIds = [];
38 private $parentIds = [];
51 $this->linkCollectionFactory = $linkCollectionFactory;
52 $this->enumLookup = $enumLookup;
64 if (!in_array(
$optionId, $this->optionIds)) {
67 if (!in_array($parentId, $this->parentIds)) {
68 $this->parentIds[] = $parentId;
80 $linksList = $this->fetch();
94 private function fetch() : array
96 if (empty($this->optionIds) || empty($this->parentIds) || !empty($this->links)) {
103 $field =
'parent_product_id';
106 $field = $tableAlias .
'.' . $field;
111 ->where($field .
' IN (?)', $this->parentIds);
117 'price' =>
$link->getSelectionPriceValue(),
118 'position' =>
$link->getPosition(),
119 'id' =>
$link->getSelectionId(),
120 'qty' => (int)
$link->getSelectionQty(),
121 'is_default' => (bool)
$link->getIsDefault(),
122 'price_type' => $this->enumLookup->getEnumValueFromField(
124 (
string)
$link->getSelectionPriceType()
126 'can_change_quantity' =>
$link->getSelectionCanChangeQty(),
129 if (!isset($this->links[
$link->getOptionId()])) {
130 $this->links[
$link->getOptionId()] = [];
__construct(CollectionFactory $linkCollectionFactory, EnumLookup $enumLookup)
getLinksForOptionId(int $optionId)
addIdFilters(int $optionId, int $parentId)