Drupal 8では、この記事の執筆時点では関数webform_get_submissions()はありません。
Webフォームはノードに接続できます。特定のノード(ノードID = 15など)に属するWebフォームのすべての送信を取得する方法:
webform_get_submissions_by_node_id()...は必要な関数です。
ここでも同様の質問がありますが、PHPコードは、特定のノードで作成された場所が異なる提出のみを取得します。このため、今でも答えを見つけることができます。
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();
}
現在のすべての回答は正しいですが、Webフォーム、ソースエンティティ、アカウントによる送信の読み込みは少し簡単になるはずなので、作成しました Issue#2954515:Add WebformSubmissionStorage :: loadByEntities method これにより、完全に読み込まれたエンティティを使用して、関連する提出物を読み込みます。
$storage = \Drupal::entityTypeManager()->getStorage('webform_submission');
$webform_submissions = $storage->loadByEntities($webform, $node);
Drupal 8バージョンのWebform送信ではエンティティに保存され、loadByProperties()
を使用するなどして、他のエンティティと同様に取得できます。
$storage = \Drupal::entityTypeManager()->getStorage('webform_submission');
$submissions = $storage->loadByProperties([
'entity_type' => 'node',
'entity_id' => '123',
]);
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)