Update a node / Entity programmatically in Drupal 8 | Drupal 8

Update a node / Entity programmatically in Drupal 8

Submitted by editor on Sat, 12/05/2015 - 17:47
Question

How to update a node or an Entity programmatically in Drupal 8 ?
Update title, Update body text or other custom field;

Update a node:

Example 1 : Update title
$node = \Drupal\node\Entity\Node::load($nid);
$node->setTitle('The new Title')
$node->save();

Example 2 : Update a field ('body' and 'field_name')
$node = \Drupal\node\Entity\Node::load($nid);
$node->set("body", 'New body text');
$node->set("field_name", 'New value');
$node->save();

 

To make changes after click on save / edit button, you can use the hook_entity_presave.
hook_entity_presave(Drupal\Core\Entity\EntityInterface $entity);
Example:
function CUSTOM_MODULE_node_presave(Drupal\node\NodeInterface $node) {
  $node->setTitle('Edited Title');
  $node->set('body', 'this is the bew body');
  //CAUTION : Do not save here, because it's automatic.
}

Note : Do not re save inside of hook_entity_presave().

Using HOOK_entity_presave()

function mymodule_entity_presave(Drupal\Core\Entity\EntityInterface $entity) {
  if ($entity->getEntityType()->id() == 'node') {
    $entity->setTitle('The new Title');
    //CAUTION : Do not save here, because it's automatic.
  }
}

 

Comments

Brown Thumb (not verified)

Tue, 02/23/2016 - 08:27

How to update a node or (not oe) thank you for this site it is very helful

Duane (not verified)

Sun, 03/26/2017 - 08:17

Many thanks for posting this! Just read the Drupal 8 docs for this hook (https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Entity%21entity.api.php/function/hook_entity_presave/8.2.x) and this would probably be most people's next logical question.

antrecu (not verified)

Mon, 05/29/2017 - 18:47

but can you also explain how to update just the value of a field without saving the whole entity? meaning an alternative to field_attach_update in D7, deprecated on D8

http://www.drupalcontrib.org/api/drupal/drupal!core!modules!field!field.attach.inc/function/field_attach_update/8

Add new comment