Quelle serait la dernière meilleure pratique pour charger Order en utilisant l'incrément ID (au lieu de Order ID) en utilisant OrderRepository
magento2
module
orders
magento-2.1
frostshoxx
la source
la source
Réponses:
Magento 2 utilise des contrats de service pour récupérer et enregistrer des objets. Dans Magento, cette couche est formée de référentiels, qui sont des gestionnaires
get()
et dessave()
méthodes. Cela éloigne le code utilisateur des appels du modèle. N'appelez pas les méthodes de modèle (commeload()
ousave()
ouloadByIncrementId()
) directement, elles sont obsolètes car le code personnalisé doit utiliser les contrats de service. De plus, n'utilisez pas l'API depuis Magento comme Khoa le suggère, cela n'a pas de sens. L'API permet de connecter Magento à d'autres systèmes.Injectez OrderRepository et SearchCriteriaBuilder dans votre constructeur:
Et dans votre fonction:
Guide officiel des développeurs PHP Magento sur magento.com
Code de Mulderea sur Github
la source
$order = $orderList[0]
par$order = $orderList->getFirstItem()
pour obtenir le premier (et le seul) élément de la collection.$order = $orderList->getFirstItem(); $payment = $order->getPayment();
Mais n'obtiens rien$payment
Veuillez vérifier mon problème ici magento.stackexchange.com/questions/158935/…$order = $orderList['000000001'];
Pour autant que je sache, nous devrions utiliser
\Magento\Sales\Api\Data\OrderInterface
.Charger l'objet de commande par ID d'incrément:
[EDIT] devrait essayer avec les contrats de service. Essayez la réponse de Jacco.
la source
\Magento\Sales\Api\OrderRepositoryInterface
et saget()
méthode