function node_update_8003

Promote 'status' and 'uid' fields to entity keys.

File

core/modules/node/node.install, line 199

Code

function node_update_8003() {
    // The 'status' and 'uid' fields were added to the 'entity_keys' annotation
    // of \Drupal\node\Entity\Node in https://www.drupal.org/node/2498919, but
    // this update function wasn't added until
    // https://www.drupal.org/node/2542748.
    $manager = \Drupal::entityDefinitionUpdateManager();
    $entity_type = $manager->getEntityType('node');
    $entity_keys = $entity_type->getKeys();
    $entity_keys['status'] = 'status';
    $entity_keys['uid'] = 'uid';
    $entity_type->set('entity_keys', $entity_keys);
    $manager->updateEntityType($entity_type);
    // @todo The above should be enough, since that is the only definition that
    //   changed. But \Drupal\Core\Entity\Sql\SqlContentEntityStorageSchema varies
    //   field schema by whether a field is an entity key, so invoke
    //   EntityDefinitionUpdateManagerInterface::updateFieldStorageDefinition()
    //   with an unmodified field storage definition to trigger the necessary
    //   changes. SqlContentEntityStorageSchema::onEntityTypeUpdate() should be
    //   fixed to automatically handle this.
    //   See https://www.drupal.org/node/2554245.
    foreach ([
        'status',
        'uid',
    ] as $field_name) {
        $manager->updateFieldStorageDefinition($manager->getFieldStorageDefinition($field_name, 'node'));
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.