Magento 2: Cara memuat kutipan dengan kutipan id


Jawaban:


19

Anda dapat menyuntikkan di kelas Anda contoh \Magento\Quote\Model\QuoteFactory.

protected $quoteFactory;

public function __construct(
    ...
    \Magento\Quote\Model\QuoteFactory $quoteFactory,
    ....
) {
    ....
    $this->quoteFactory = $quoteFactory;
    ....
}

Maka Anda dapat menggunakan:

$quote = $this->quoteFactory->create()->load($quoteId);

Ini seharusnya berfungsi untuk saat ini, tetapi segera, loadmetode ini akan hilang dan Anda perlu menggunakan kontrak layanan.
Jadi bisa digunakan \Magento\Quote\Api\CartRepositoryInterface.
Sama seperti di atas, masukkan instance kelas ini di kelas Anda:

protected $quoteRepository;

public function __construct(
    ...
    \Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
    ....
) {
    ....
    $this->quoteRepository = $quoteRepository;
    ....
}

dan gunakan ini:

$this->quoteRepository->get($quoteId);

Jika Anda ingin melihat seperti apa kode itu, implementasinya \Magento\Quote\Api\CartRepositoryInterfaceadalah\Magento\Quote\Model\QuoteRepository


Hai @Marius, apakah ini akan berfungsi jika terjadi beberapa tampilan toko juga?
manini

Saya pikir ini akan berhasil
Marius

13

Pertama, Anda perlu menyuntikkan \Magento\Quote\Model\QuoteFactorykonstruktor kelas Anda:

protected $_quoteFactory;

public function __construct(
    ...
    \Magento\Quote\Model\QuoteFactory $quoteFactory
) {
    $this->_quoteFactory = $quoteFactory;
    parent::__construct(...);
}

Kemudian di kelas Anda, Anda dapat melakukan:

$this->_quoteFactory->create()->loadByIdWithoutStore($quoteId);

Di samping catatan Anda juga dapat menggunakan metode berikut untuk memuat penawaran:

  • loadActive($quoteId)di mana ia memuat kuotasi aktif yang sesuai (di mana is_active= 1)
  • loadByCustomerId($customerId) di mana ia memuat kutipan aktif yang sesuai dengan id pelanggan.

NB: Anda juga bisa menggunakan object manager secara langsung untuk melakukannya tetapi tidak disarankan :

$this->_objectManager->create('Magento\Quote\Model\Quote')->loadByIdWithoutStor‌​e($quoteId);

1
\Magento\Quote\Model\Quoteadalah kelas yang tidak dapat disuntikkan. Maksud saya Anda bisa menyuntikkannya, tetapi itu bukan ide terbaik untuk melakukannya. Jika Anda menyuntikkan kelas ini dalam 2 kelas lain, Anda akan mendapatkannya sebagai singleton dalam wadah DI dan jika Anda memanggil loadsatu kali di salah satu kelas, Anda akan memilikinya "dimuat" di kelas Anda yang lain juga. Kemungkinan besar Anda tidak menginginkannya. Gunakan pabrik sebagai gantinya.
Marius

@Marius inilah yang terjadi ketika Anda mengerjakan proyek M1 dan M2 secara bersamaan. Anda cenderung mencampur semuanya. Terima kasih atas pencerahan dan +1 untuk solusi Anda, jelas cara yang tepat untuk pergi dengan kontrak layanan
Raphael di Digital Pianism

Alih-alih $this->_objectManager->get('Magento\Quote\Model\QuoteFactory')->create()->loadByIdWithoutStore($quoteId);Anda dapat menggunakan $this->_objectManager->create('Magento\Quote\Model\Quote')->loadByIdWithoutStore($quoteId);Untuk alasan yang sama disebutkan di atas. memanggil getOM akan menghasilkan singleton.
Marius

@Marius Saya menemukan bahwa getvs createlebih jelas daripada penggunaan lajang M1 tapi saya masih cenderung menyalahgunakan mereka
Raphael di Digital Pianism

Jangan khawatir. Pernah ke sana, melakukan itu. :)
Marius
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.