web-dev-qa-db-ja.com

プロパティによって注文をプログラムで読み込むにはどうすればよいですか?

\Drupal\commerce_order\Entity\Order::load($order_id)を使用して、IDで注文を読み込む方法を知っています。カスタムフィールド(Token ID)を注文に追加しました。

そのフィールドの値を知っている注文をどのようにロードできますか?注文の状態を取得したい場合、どうすればそれを達成できますか?

2
Rifas Ali

これを行う最善の方法は、Tokenフィールドに基づいてloadByPropertiesを使用することです。

$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();

ここでは、トークンを一意の値として想定しています。

6
Ajay Reddy

Drupal EntityQueryを使用して注文IDを取得し、そのIDを使用して注文をロードする必要があります。次のコードが役立つ場合があります。

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

すべての注文を取得する最も効率的で迅速な方法は

$orders = \Drupal::entityTypeManager()->getStorage('commerce_order')->loadMultiple();

完了した注文を取得したい場合は、次のようにloadByProperties()を使用できます。

$orders = \Drupal::entityTypeManager()->getStorage('commerce_order')->loadByProperties(['state' => 'completed']);
2
Lovejit S.