web-dev-qa-db-ja.com

プログラムによって特定のノードのWebフォームのWebフォーム送信を取得する

Drupal 8では、この記事の執筆時点では関数webform_get_submissions()はありません。

Webフォームはノードに接続できます。特定のノード(ノードID = 15など)に属するWebフォームのすべての送信を取得する方法:

webform_get_submissions_by_node_id()...は必要な関数です。

ここでも同様の質問がありますが、PHPコードは、特定のノードで作成された場所が異なる提出のみを取得します。このため、今でも答えを見つけることができます。

7
drupalfan

4k4ありがとうございます。これがmytheme.themeファイルで使用するための正しい完全なコードです(getData()関数が必要です)。

$storage = \Drupal::entityTypeManager()->getStorage('webform_submission');
$webform_submission = $storage->loadByProperties([
  'entity_type' => 'node',
  'entity_id' => $variables['node']->id(),
]);
$submission_data = array();
foreach ($webform_submission as $submission) {
  $submission_data[] = $submission->getData();
}
8
drupalfan

現在のすべての回答は正しいですが、Webフォーム、ソースエンティティ、アカウントによる送信の読み込みは少し簡単になるはずなので、作成しました Issue#2954515:Add WebformSubmissionStorage :: loadByEntities method これにより、完全に読み込まれたエンティティを使用して、関連する提出物を読み込みます。

$storage = \Drupal::entityTypeManager()->getStorage('webform_submission');
$webform_submissions = $storage->loadByEntities($webform, $node);
3
jrockowitz

Drupal 8バージョンのWebform送信ではエンティティに保存され、loadByProperties()を使用するなどして、他のエンティティと同様に取得できます。

$storage = \Drupal::entityTypeManager()->getStorage('webform_submission');
$submissions = $storage->loadByProperties([
  'entity_type' => 'node',
  'entity_id' => '123',
]);
3
4k4

DrupalのentityQuery()を使用して、高度なフィルター/条件を作成することもできます。

$query = \Drupal::entityQuery('webform_submission')
                ->condition('entity_type', 'node')
                ->condition('entity_id', 123, '='); // optional operator
$results = $query->execute();

ご了承ください $resultsにはSID(送信ID)のみが含まれます。エンティティローダーを介してそれらをロードする必要がある場合があります。

\Drupal\webform\Entity\WebformSubmission::loadMultiple($results)
1
Geolim4