J'essaie de mettre à jour l'élément de devis dans magento2. Mais chaque fois que j'enregistre l'article, il crée un nouvel article avec le même identifiant de devis plutôt que de le mettre à jour. Voici mon code
public function __construct(
\Magento\Quote\Model\QuoteRepository $quoteRepo
){
$this->_quoteRepo = $quoteRepo;
}
public function updateItem(){
$quote = $this->_quoteRepo->get('id here');
foreach($quote->getAllVisibleItems() as $itemq){
$itemq->setQty(5);
$itemq->setPrice(20);
$itemq->save();
}
}
Mais chaque fois qu'il enregistre un élément .. un nouvel élément est généré. Je ne sais pas pourquoi. Aussi I couldn't find any class which explicitly load qoute item in magento2
. Votre aide sera appréciée.
Dans cette question, /magento/139298/how-to-save-quote-items-in-magento-2
ils définissent l'ensemble du produit ... sans essayer de le mettre à jour. Lorsque vous définissez un produit, un nouvel élément de devis sera sûrement généré. Mais pourquoi faire de même en cas de mise à jour.
Réponses:
Je ne suis pas sûr de ma solution ci-dessous:
la source
La fonctionnalité que vous demandez est déjà effectuée
Magento\Checkout\Controller\Cart\UpdatePost
et est exécutée lorsque nous mettons à jour le panier sur la page du panier de magento. Il exécute laupdateItems()
fonction deMagento\Checkout\Model\Cart
mettre à jour les éléments duquote_item
tableau. Il prend des paramètres sous forme de tableau$data ['item id of product']['attribute you want to update']
.Ainsi, vous pouvez appeler un
updateItems()
objet de modèle de panier et transmettre les données en conséquence pour mettre à jour les articles. De même, si vous n'obtenez pas l'ID de l'article, vous pouvez l'obtenir comme suit$this->cart->getQuote()->getAllItems()
, puis appelergetItemId()
chaque article.la source