1

I created a custom entity in my module and I can edit and save it just like any other entity in core. I also want to save revisions for this entity but I couldn't find any help so far. I tried this (from node module) but it doesn't work:

$entity = $this->getEntity();
$entity->new_revision = true;
$entity->save();

I have the revisions tables declared in @ContentEntityType annotation, I have the revision_id field declared in baseFieldDefinitions() but I don't know how to actually save a new revision.

1 Answer 1

2

For Drupal 8 most intern values like the revision flag (newRevision) is protected, which means that you aren't allowed to set them directly. There is a good reason for this, as Drupal wants to do stuff in some cases when these values are set.

Instead you need to use the ::setNewRevision method on the entity. This will throw an exception if the entity doesn't support revisions. So if you don't know what entities you are dealing with, you could do something like this.

function save_new_revisions(EntityInterface $entities) {
  foreach ($entities as $entity) {
    if ($entity->getEntityType()->isRevisionable()) {
      $entity->setNewRevision();
    }
    $entity->save();
  }
}
3
  • I had to add $entity->setNewRevision() instead of $entity->new_revision = true; Commented Oct 9, 2016 at 11:05
  • Good answer. FYI, you might as well set a log message as well. For example: $entity->setRevisionLogMessage('Transitioned by SendToPayroll service.'); Commented Nov 9, 2018 at 15:57
  • And maybe: $group->setRevisionTranslationAffected(TRUE); $group->setRevisionUser(User::load(\Drupal::currentUser()->id()); - note that i need the translation one or the revision didn't appear in the UI.
    – simesy
    Commented Feb 12 at 4:38

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.