If I've created a node in an install hook, how can I immediately get a reference to the nid property? It doesn't appear to be set on the entity during save.

use Drupal\node\Entity\Node;

function my_frontpage_install() {
    $node = Node::create(array(
        'type' => 'page',
        'title' => t('Welcome'),
        'body' => array(array(
            'value' => 'Hi there'


    $siteConfig = \Drupal::service('config.factory')->getEditable('system.site');
    $pageConfig = $siteConfig->get('page');
    $pageConfig['front'] = 'node/' . $node->getId(); // this returns null
    $siteConfig->set('page', $pageConfig);

I've tried variations on the theme of getId, getNid(), get('nid'), getOriginalId(), but if I dump out the node object afer saving, the nid property is clearly not set.

  • Have you check $node->nid ! – DRUPWAY Aug 24 '15 at 6:48
  • 4
    It is $node->id(). – user21641 Aug 24 '15 at 7:00
  • @IvanJaros that works, you should put it as an answer – shanethehat Aug 24 '15 at 7:36
  • 3
    Note: the front/404/403 paths require a leading slash now (beta13+). Also, you can simplify your code a lot with $config->set('page.front', '/node/' . $node->id()). – Berdir Aug 24 '15 at 18:42

The nice thing about Drupal 8, is that it's object oriented, with interfaces, abstract classes etc.

This means that all entities share a lot of methods. To get the id of a node, use the id method

$nid = $node->id();

This also works for users, taxonomy terms and any other entities you create yourself or get from contrib modules modules.

For Drupal 8 development, using an IDE becomes really powerfull as it can help you with what available methods, various instances of classes has.

Your Answer

