Respostas:
você pode injetar na sua classe uma instância de \Magento\Quote\Model\QuoteFactory
.
protected $quoteFactory;
public function __construct(
...
\Magento\Quote\Model\QuoteFactory $quoteFactory,
....
) {
....
$this->quoteFactory = $quoteFactory;
....
}
Então você pode usar:
$quote = $this->quoteFactory->create()->load($quoteId);
Isso deve funcionar por enquanto, mas em breve o load
método desaparecerá e você precisará usar um contrato de serviço.
Então você pode usar \Magento\Quote\Api\CartRepositoryInterface
.
O mesmo que acima, injete uma instância desta classe em sua classe:
protected $quoteRepository;
public function __construct(
...
\Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
....
) {
....
$this->quoteRepository = $quoteRepository;
....
}
e use isto:
$this->quoteRepository->get($quoteId);
Se você quiser ver como é o código, a implementação para \Magento\Quote\Api\CartRepositoryInterface
é\Magento\Quote\Model\QuoteRepository
Primeiro você precisa injetar um \Magento\Quote\Model\QuoteFactory
no construtor de sua classe:
protected $_quoteFactory;
public function __construct(
...
\Magento\Quote\Model\QuoteFactory $quoteFactory
) {
$this->_quoteFactory = $quoteFactory;
parent::__construct(...);
}
Então, na sua turma, você pode fazer:
$this->_quoteFactory->create()->loadByIdWithoutStore($quoteId);
Em uma nota lateral, você também pode usar os seguintes métodos para carregar uma cotação:
loadActive($quoteId)
onde carrega a cotação ativa correspondente (em que is_active
= 1)loadByCustomerId($customerId)
onde ele carrega a cotação ativa correspondente ao ID do cliente.Nota: você também pode usar o gerenciador de objetos diretamente para fazê-lo, mas não é recomendado :
$this->_objectManager->create('Magento\Quote\Model\Quote')->loadByIdWithoutStore($quoteId);
\Magento\Quote\Model\Quote
é uma classe não injetável. Quero dizer, você pode injetar, mas não é a melhor ideia para fazê-lo. Se você injetar essa classe em outras 2 classes, você a receberá como um singleton no contêiner DI e se você ligar load
uma vez em uma das classes, também a terá "carregada" na outra classe. Muito provavelmente você não quer isso. Use fábricas em seu lugar.
$this->_objectManager->get('Magento\Quote\Model\QuoteFactory')->create()->loadByIdWithoutStore($quoteId);
você pode usar $this->_objectManager->create('Magento\Quote\Model\Quote')->loadByIdWithoutStore($quoteId);
Pelo mesmo motivo indicado acima. chamar get
o OM resultará em um singleton.
get
vs create
é mais óbvio do que o uso de singletons de M1 mas eu ainda tendem a abusar deles