web-dev-qa-db-fra.com

Comment charger par programme une commande par ses propriétés?

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?

2
Rifas Ali

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.

6
Ajay Reddy

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);
}
3

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']);
2
Lovejit S.