123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Quote\Model\ResourceModel\Quote\Item\Option;
- use Magento\Quote\Model\Quote\Item;
- /**
- * Item option collection
- *
- * @author Magento Core Team <core@magentocommerce.com>
- */
- class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
- {
- /**
- * Array of option ids grouped by item id
- *
- * @var array
- */
- protected $_optionsByItem = [];
- /**
- * Array of option ids grouped by product id
- *
- * @var array
- */
- protected $_optionsByProduct = [];
- /**
- * Define resource model for collection
- *
- * @return void
- */
- protected function _construct()
- {
- $this->_init(
- \Magento\Quote\Model\Quote\Item\Option::class,
- \Magento\Quote\Model\ResourceModel\Quote\Item\Option::class
- );
- }
- /**
- * Fill array of options by item and product
- *
- * @return $this
- */
- protected function _afterLoad()
- {
- parent::_afterLoad();
- foreach ($this as $option) {
- $optionId = $option->getId();
- $itemId = $option->getItemId();
- $productId = $option->getProductId();
- if (isset($this->_optionsByItem[$itemId])) {
- $this->_optionsByItem[$itemId][] = $optionId;
- } else {
- $this->_optionsByItem[$itemId] = [$optionId];
- }
- if (isset($this->_optionsByProduct[$productId])) {
- $this->_optionsByProduct[$productId][] = $optionId;
- } else {
- $this->_optionsByProduct[$productId] = [$optionId];
- }
- }
- return $this;
- }
- /**
- * Apply quote item(s) filter to collection
- *
- * @param int|array|Item $item
- * @return $this
- */
- public function addItemFilter($item)
- {
- if (empty($item)) {
- $this->_totalRecords = 0;
- $this->_setIsLoaded(true);
- //$this->addFieldToFilter('item_id', '');
- } elseif (is_array($item)) {
- $this->addFieldToFilter('item_id', ['in' => $item]);
- } elseif ($item instanceof Item) {
- $this->addFieldToFilter('item_id', $item->getId());
- } else {
- $this->addFieldToFilter('item_id', $item);
- }
- return $this;
- }
- /**
- * Get array of all product ids
- *
- * @return array
- */
- public function getProductIds()
- {
- $this->load();
- return array_keys($this->_optionsByProduct);
- }
- /**
- * Get all option for item
- *
- * @param mixed $item
- * @return array
- */
- public function getOptionsByItem($item)
- {
- if ($item instanceof Item) {
- $itemId = $item->getId();
- } else {
- $itemId = $item;
- }
- $this->load();
- $options = [];
- if (isset($this->_optionsByItem[$itemId])) {
- foreach ($this->_optionsByItem[$itemId] as $optionId) {
- $options[] = $this->_items[$optionId];
- }
- }
- return $options;
- }
- /**
- * Get all option for item
- *
- * @param int | \Magento\Catalog\Model\Product $product
- * @return array
- */
- public function getOptionsByProduct($product)
- {
- if ($product instanceof \Magento\Catalog\Model\Product) {
- $productId = $product->getId();
- } else {
- $productId = $product;
- }
- $this->load();
- $options = [];
- if (isset($this->_optionsByProduct[$productId])) {
- foreach ($this->_optionsByProduct[$productId] as $optionId) {
- $options[] = $this->_items[$optionId];
- }
- }
- return $options;
- }
- }
|