getItemById($ItemId) для модели котировок Magento не работает должным образом в Magento 2


Вот мой код, в котором я вызываю файл модели цитаты и функцию getItemById.

 public function __construct(
        \Magento\Quote\Model\Quote $quote
    ) {
        $this->quote = $quote;
    }

$itemId = "Quote Item ID";
$data = $this->quote->getItemById($itemId);

Приведенный выше код возвращает FALSE - даже существует 65 пунктов котировок!


Поэтому я проверил Метод ядра Magento getItemById в -

/vendor/magento/module-quote/Model/Quote.php

     /**
     * Retrieve item model object by item identifier
     *
     * @param   int $itemId
     * @return  \Magento\Quote\Model\Quote\Item|false
     */
    public function getItemById($itemId)
    {
        foreach ($this->getItemsCollection() as $item) {
            if ($item->getId() == $itemId) {
                return $item;
            }
        }

        return false;
    }

Если я напечатаю $this->getItemsCollection()->getData(), то он вернет массивы элементов 65.

Но как Magento, проходящий непосредственно объект коллекции $this->getItemsCollection() в foreach

Таким образом, не входит в цикл foreach, который является ожидаемым результатом.

Это ошибка Magento или я делаю что-то не так?


Отредактированный

Проблема с файлом модели котировок Magento все еще открыта.

/vendor/magento/module-quote/Model/Quote.php

В качестве ответа Рохана Хапани мы получаем данные от \Magento\Quote\Model\Quote\Item На данный момент.

Но для получения Magento getitembyid все еще требуется должно быть исправлено.

/vendor/magento/module-quote/Model/Quote.php

/**
 * Retrieve item model object by item identifier
 *
 * @param   int $itemId
 * @return  \Magento\Quote\Model\Quote\Item|false
 */
public function getItemById($itemId)
{
    foreach ($this->getItemsCollection() as $item) {
        if ($item->getId() == $itemId) {
            return $item;
        }
    }

    return false;
}

Так что откройтесь для решений:)

Author: Aditya Shah, 2019-01-04

2 answers

Попробуйте использовать следующий код:

/**
 * @var \Magento\Quote\Model\Quote\Item
 */
protected $_itemModel;

public function __construct(
    .........
    \Magento\Quote\Model\Quote\Item $itemModel
    .........
)
{
    .........
    $this->_itemModel = $itemModel;
    .........
}

public function yourFunction()
{
    $itemId = "Quote Item ID";
    $this->_itemModel->load($itemId);
}
 4
Author: Rohan Hapani, 2019-01-04 10:26:13

Вместо того, чтобы вводить \Magento\Цитата\Модель\Цитата класс в конструкторе, попробуйте ввести \Magento\Проверка\Модель\Сеанс, а затем

$quote = $this->_session->getQuote();

Это предполагает, что ваш код работает с активным сеансом проверки интерфейса

 2
Author: Raul Sanchez, 2019-01-04 10:32:51