Je sais comment charger une commande par son ID en utilisant \Drupal\commerce_order\Entity\Order::load($order_id)
. J'ai ajouté un champ personnalisé (Token ID) aux commandes.
Comment puis-je charger les commandes en connaissant la valeur de ce champ? Si je veux obtenir l'état de la commande, comment y parvenir?
La meilleure façon de procéder consiste à utiliser par loadByProperties
en fonction du champ Token:
$orders = \Drupal::entityTypeManager()
->getStorage('commerce_order')
->loadByProperties(['field_token_id' => 'TOKEN VALUE']);
$order = reset($orders);
$state = $order->get('state')->value;
$total_price = $order->getTotalprice()->getNumber();
$currency = $order->getTotalprice()->getCurrencyCode();
Ici, en supposant que le jeton est une valeur unique.
vous devrez utiliser Drupal EntityQuery pour obtenir l'ID de commande et charger la commande à l'aide de son ID, le code suivant pourrait vous aider:
$query = \Drupal::entityQuery('commerce_order')
->condition('field_token_id.value', VALUE_OF_TOKEN);
$order_ids = $query->execute();
foreach($order_ids as $order_id) {
\Drupal\commerce_order\Entity\Order::load($order_id);
}
Je crois que le moyen le plus efficace et le plus rapide d'obtenir toutes les commandes est
$orders = \Drupal::entityTypeManager()->getStorage('commerce_order')->loadMultiple();
si vous souhaitez obtenir les commandes terminées, vous pouvez utiliser loadByProperties () comme:
$orders = \Drupal::entityTypeManager()->getStorage('commerce_order')->loadByProperties(['state' => 'completed']);