7 system.api.php hook_query_alter(QueryAlterableInterface $query)
8 database.api.php hook_query_alter(Drupal\Core\Database\Query\AlterableInterface $query)

Perform alterations to a structured query.

Structured (aka dynamic) queries that have tags associated may be altered by any module before the query is executed.


$query: A Query object describing the composite parts of a SQL query.

See also





Related topics

5 functions implement hook_query_alter()

Note: this list is generated by pattern matching, so it may include some functions that are not actually implementations of this hook.

database_test_query_alter in modules/simpletest/tests/database_test.module
Implements hook_query_alter().
field_test_entity_query_alter in modules/field/tests/field_test.module
Implements hook_entity_query_alter().
field_test_query_store_global_test_query_alter in modules/field/tests/field_test.module
Implements hook_query_TAG_alter() for tag 'store_global_test_query'.
search_node_tags_query_alter in modules/search/tests/search_node_tags.module
Implements hook_query_alter().
taxonomy_entity_query_alter in modules/taxonomy/taxonomy.module
Implements hook_entity_query_alter().


modules/system/system.api.php, line 3282
Hooks provided by Drupal core and the System module.


function hook_query_alter(QueryAlterableInterface $query) {
  if ($query->hasTag('micro_limit')) {
    $query->range(0, 2);


ONLY queries that have already been tagged (at creation time) can be caught by this hook.
If the query you are hoping to alter doesn't already have a tag (which effectively 'publishes' its willingness to let you mess with it) then you can't alter it using this method.

To find out - inspect the source code of the query you are trying to modify.

Looking at where this hook is (maybe) invoked at preExecute() you see that if it's not tagged, the hook is not fired.

For more information : https://drupal.org/node/310077