web-dev-qa-db-fra.com

Comment obtenir un objet de nœud à partir de l'ID de nœud

dans un module personnalisé drupal 8, comment puis-je obtenir un objet nœud si j'ai l'ID du nœud? J'ai essayé:

$node = new Node($nid);
$node->save();`

mais a obtenu cette erreur:

L'argument 1 passé à Drupal\Core\Entity\ContentEntityBase :: __ construct () doit être du type tableau, chaîne donnée,

5
Diana

Il y a plusieurs façons.

Si votre contexte permet injection de dépendance , injectez le entity_type.manager service et utilisez-le comme ceci:

$node = $this->entityTypeManager->getStorage('node')->load($nid);

Sinon, vous pouvez toujours utiliser le entity_type.manager un service:

$node = \Drupal::entityTypeManager()->getStorage('node')->load($nid);

Si vous préférez, vous pouvez utiliser directement la classe Node:

$node = \Drupal\node\Entity\Node::load($nid);
10
Clive

Vous n'utilisez jamais new pour créer une entité, chaque fois que vous devez la charger depuis la base de données ou la créer sans la charger depuis la base de données.

Dans le cas où vous souhaitez créer un nœud, vous utilisez Node::create(), comme dans l'exemple de code suivant.

  use Drupal\node\Entity\Node;

  $settings = [
    'body' => [
      [
        'value' => 'The node body is here.',
        'format' => filter_default_format(),
      ],
    ],
    'title' => 'The node title',
    'type' => 'page',
    'uid' => \Drupal::currentUser()->id(),
  ];
  $node = Node::create($settings); 

Si vous devez simplement charger un nœud à partir de la base de données en connaissant son ID de nœud, le code est beaucoup plus simple.

  use Drupal\node\Entity\Node;

  $node = Node::load($nid);

Si vous devez ensuite charger un nœud à partir de la base de données en connaissant d'autres propriétés, mais pas l'ID de nœud, vous pouvez utiliser le code suivant.

  use Drupal\node\Entity\Node;

  $nodes = \Drupal::entityTypeManager()->getStorage('node')->loadByProperties($values);

$nodes est un tableau contenant zéro ou plusieurs nœuds, et $values est un tableau décrivant les propriétés que vous connaissez.

4
kiamlaluno