Skip to main content
Drupal is a registered trademark of Dries Buytaert
Release: OpenID Connect / OAuth client 3.0.0-alpha9 New alpha version released for module openid_connect (3.0.0-alpha9). Release: Opensolr Search 4.5.0 Minor update available for module opensolr_search (4.5.0). Release: Timelinr 1.0.1 Minor update available for module timelinr (1.0.1). Usage Milestone: Simplify Module simplify crossed 10,000 active installs. Usage Milestone: Views Reference Filter Module entityreference_filter crossed 10,000 active installs. Usage Milestone: Dropdown Language Module dropdown_language crossed 10,000 active installs. Usage Milestone: Paragraphs Browser Module paragraphs_browser crossed 10,000 active installs. Usage Milestone: OpenAPI Module openapi crossed 10,000 active installs. Usage Milestone: Decoupled Router Module decoupled_router crossed 10,000 active installs. Module Revived: Entityqueue Buttons 1.1.2 Module entityqueue_buttons updated after 8 months of inactivity (1.1.2).

This module helps you extract specific webform submission data based on field values and criteria. You can query submissions from a particular webform, filter them by various conditions, and even sort the results. It also allows querying other tables that contain submission IDs and supports array-based queries for more flexible filtering.

Query Webform Submission Data

The Webform module stores all submission data in the one table using the EAV model. This is great for performance but it can be tricky to extract submission data matching certain criteria.

Webform Query extracts submission IDs based on field values. Currently it supports adding conditions and specifying the webform ID. For example, this would return all "event_registration" submissions for event 1 where the age is 18 or over:

$query = \Drupal::service('webform_query');

$query->addCondition('event', 1)
      ->addCondition('age', 18, '>=')
      ->setWebform('event_registration');
$results = $query->execute();

The return type is an array of objects with a single property "sid", the submission ID. The webform submissions can then be loaded in the normal way.

The webform_id is optional. This would return all webform submissions where the value of the "event" field is 1.

$query = \Drupal::service('webform_query');

$query->addCondition('event', 1);
$results = $query->execute();

Sort the results

$query = \Drupal::service('webform_query');

$query->addCondition('event', 1);
$query->orderBy('age', 'DESC');
$results = $query->execute();

"ASC" is used if the second parameter is missing. The third optional parameter is the table.

$query = \Drupal::service('webform_query');

$query->addCondition('event', 1);
$query->orderBy('created', 'DESC', 'webform_submission');
$results = $query->execute();

Query other tables

Querying other tables which include a sid column is now possible. This is useful for querying the webform_submission table to filter by user, date submitted and other base fields.

addCondition() accepts a table name as an optional fourth parameter.

These tables are queried before webform_submission_data to improve performance.

$query = \Drupal::service('webform_query');

$query->addCondition('event', 1)    
      ->setWebform('event_registration')
      ->addCondition('uid', 1, '=', 'webform_submission');
$results = $query->execute();

Array Queries (IN)

$query = \Drupal::service('webform_query');
$query->addCondition('event', 1)    
      ->setWebform('event_registration')
      ->addCondition('uid', [1, 5, 7], 'IN', 'webform_submission');
$results = $query->processQuery()->fetchCol();
$query = \Drupal::service('webform_query');
$query->addCondition('event', 1)    
      ->setWebform('event_registration')
      ->addCondition('age', [18, 19, 20], 'IN', 'webform_submission_data');
$results = $query->processQuery()->fetchCol();

Additional result types

The method processQuery() returns Drupal\Core\Database\Statement which allows for different result types.

$query = \Drupal::service('webform_query');

$query->addCondition('event', 1)    
      ->setWebform('event_registration')
      ->addCondition('uid', 1, '=', 'webform_submission');
$results = $query->processQuery()->fetchCol();

Depends on

Dependencies of the latest stable release

No dependencies recorded for this project.

Required by

Tracked projects that depend on this one

No tracked projects depend on this one yet.

Activity

Tracked releases
1
Tracked since
Jan 2025
Latest release
1 year ago
Releases (12 mo)
0 ▼ from 1
Maintenance
Dormant

Releases

Version Type Core Release date
8.x-1.0-alpha4 Pre-release 8–11 Jan 31, 2025