Magento 2:見積もりIDで見積もりを読み込む方法


回答:


19

クラスにのインスタンスを注入できます\Magento\Quote\Model\QuoteFactory

protected $quoteFactory;

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

それからあなたは使うことができます:

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

これは今のところ機能するはずですが、すぐにloadメソッドはなくなり、サービス契約を使用する必要があります。
したがって、を使用できます\Magento\Quote\Api\CartRepositoryInterface
上記と同じように、このクラスのインスタンスをクラスに挿入します。

protected $quoteRepository;

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

これを使用してください:

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

コードがどのように見えるかを確認したい場合、の実装\Magento\Quote\Api\CartRepositoryInterface\Magento\Quote\Model\QuoteRepository


こんにちは@マリウス、これは複数のストアビューの場合にも機能しますか?
マニーニ

それはうまくいくと思います
マリウス

13

まず\Magento\Quote\Model\QuoteFactory、クラスコンストラクターにを挿入する必要があります。

protected $_quoteFactory;

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

次に、クラスで次のことができます。

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

サイドノートでは、次のメソッドを使用して見積もりをロードすることもできます。

  • loadActive($quoteId)対応するアクティブな見積もりをロードする場所(ここでis_active= 1)
  • loadByCustomerId($customerId) ここで、顧客IDに対応するアクティブな見積もりをロードします。

注:オブジェクトマネージャを直接使用して実行することもできますが、お勧めしません

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

1
\Magento\Quote\Model\Quote非注入クラスです。私はあなたがそれを注入することができることを意味しますが、そうすることは最善の考えではありません。このクラスを他の2つのクラスに注入すると、DIコンテナー内でシングルトンとして取得され、loadいずれかのクラスで1回呼び出すと、他のクラスにも「ロード」されます。おそらくあなたはそれを望まないでしょう。代わりに工場を使用してください。
マリウス

@Mariusは、M1とM2のプロジェクトで同時に作業しているときに何が起こるかを示しています。あなたはすべてを混同する傾向があります。エンライトに感謝し、ソリューションを+1します。サービス契約を結ぶ正しい方法です
デジタルピアニズムのラファエル

代わりに、上記と同じ理由で$this->_objectManager->get('Magento\Quote\Model\QuoteFactory')->create()->loadByIdWithoutStore($quoteId);使用できます$this->_objectManager->create('Magento\Quote\Model\Quote')->loadByIdWithoutStore($quoteId);getOMを呼び出すと、シングルトンになります。
マリウス

@マリウスM1のシングルトンを使用するよりもgetvsのcreate方が明白であることがわかりますが、それでも誤用しがちです
デジタルピアニズムのラファエル

心配しないで。そこに行って、それをやった。:)
マリウス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.