7 system.api.php hook_entity_insert($entity, $type)
8 entity.api.php hook_entity_insert(Drupal\Core\Entity\EntityInterface $entity)

Act on entities when inserted.

Parameters

$entity: The entity object.

$type: The type of entity being inserted (i.e. node, user, comment).

Related topics

1 function implements hook_entity_insert()

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

entity_crud_hook_test_entity_insert in modules/simpletest/tests/entity_crud_hook_test.module
Implements hook_entity_insert().
6 invocations of hook_entity_insert()
comment_save in modules/comment/comment.module
Accepts a submission of new or changed comment content.
field_attach_insert in modules/field/field.attach.inc
Save field data for a new entity.
file_save in includes/file.inc
Saves a file object to the database.
taxonomy_vocabulary_save in modules/taxonomy/taxonomy.module
Saves a vocabulary.
user_save in modules/user/user.module
Save changes to a user account or add a new user.

... See full list

File

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

Code

function hook_entity_insert($entity, $type) {
  // Insert the new entity into a fictional table of all entities.
  $info = entity_get_info($type);
  list($id) = entity_extract_ids($type, $entity);
  db_insert('example_entity')
    ->fields(array(
      'type' => $type,
      'id' => $id,
      'created' => REQUEST_TIME,
      'updated' => REQUEST_TIME,
    ))
    ->execute();
}

Comments

VERY IMPORTANT! This function is passed the UNSAVED entity, so it will not have an id assigned to it yet, and any attempt to save the entity within this function (or any functions called by it) will result in PDOExceptions due to trying to use the same unique id twice.

The documentation should really say "Act on entities BEFORE they are inserted." That would clarify this and prevent a lot of headaches by developers trying to do crazy stuff using this hook.

@bobojo, are you sure?
I've made some tests here and the $entity object do have an ID.
Also, you can check it on the sample code provided above...

So @bobojo comment is not accurate. $entity contains the id, or the nid, depending of which type of entity is inserted.

About the commitment to the DB, more information can be found on the hook_node_insert() thread: https://api.drupal.org/api/drupal/modules!node!node.api.php/function/hoo...

Notice that hook_entity_insert() and hook_node_insert() are both triggered when a new node is inserted, so only one of them should be used when adding a node.

Since this hook runs during save, we have the entity id available to us.

If you're running into a case where you need to update the uid or title on the entity during this hook then you might want to run code similar to this to avoid PDOExceptions.

$entity->title .= '-' . $entity->id;
$clone = clone $entity;
unset($clone->is_new);
entity_save('myentitytype', $clone);

The key is designate the entity as NOT new before attempting to save it via entity_save.

Thanks, your solution work like a charm!