Respuestas:
puedes inyectar en tu clase una instancia de \Magento\Quote\Model\QuoteFactory.
protected $quoteFactory;
public function __construct(
...
\Magento\Quote\Model\QuoteFactory $quoteFactory,
....
) {
....
$this->quoteFactory = $quoteFactory;
....
}
Entonces puedes usar:
$quote = $this->quoteFactory->create()->load($quoteId);
Esto debería funcionar por ahora, pero pronto, el loadmétodo desaparecerá y deberá usar un contrato de servicio.
Entonces puedes usar \Magento\Quote\Api\CartRepositoryInterface.
Igual que el anterior, inyecte una instancia de esta clase en su clase:
protected $quoteRepository;
public function __construct(
...
\Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
....
) {
....
$this->quoteRepository = $quoteRepository;
....
}
y usa esto:
$this->quoteRepository->get($quoteId);
Si desea ver cómo se ve el código, la implementación \Magento\Quote\Api\CartRepositoryInterfacees\Magento\Quote\Model\QuoteRepository
Primero debes inyectar un \Magento\Quote\Model\QuoteFactoryen el constructor de tu clase:
protected $_quoteFactory;
public function __construct(
...
\Magento\Quote\Model\QuoteFactory $quoteFactory
) {
$this->_quoteFactory = $quoteFactory;
parent::__construct(...);
}
Luego en tu clase puedes hacer:
$this->_quoteFactory->create()->loadByIdWithoutStore($quoteId);
En una nota al margen, también puede usar los siguientes métodos para cargar una cotización:
loadActive($quoteId)donde carga la cotización activa correspondiente (donde is_active= 1)loadByCustomerId($customerId) donde carga la cotización activa correspondiente a la identificación del cliente.NB: también puede usar el administrador de objetos directamente para hacerlo, pero no se recomienda :
$this->_objectManager->create('Magento\Quote\Model\Quote')->loadByIdWithoutStore($quoteId);
\Magento\Quote\Model\QuoteEs una clase no inyectable. Quiero decir que puedes inyectarlo, pero no es la mejor idea hacerlo. Si inyecta esta clase en otras 2 clases, la obtendrá como un singleton en el contenedor DI y si llama loaduna vez en una de las clases, también la tendrá "cargada" en su otra clase. Lo más probable es que no quieras eso. Use fábricas en su lugar.
$this->_objectManager->get('Magento\Quote\Model\QuoteFactory')->create()->loadByIdWithoutStore($quoteId);usted puede usarlo $this->_objectManager->create('Magento\Quote\Model\Quote')->loadByIdWithoutStore($quoteId);por la misma razón indicada anteriormente. llamar getal OM dará como resultado un singleton.
getvs createes más obvio que el uso de singletons de M1, pero todavía tiendo a usarlos mal