web-dev-qa-db-ja.com

ノードIDからノードオブジェクトを取得する方法

drupal 8カスタムモジュールで、ノードIDがある場合にノードオブジェクトを取得するにはどうすればよいですか?

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

しかし、このエラーが発生しました:

Drupal\Core\Entity\ContentEntityBase :: __ construct()に渡される引数1は、配列型、文字列型でなければなりません。

5
Diana

いくつかの方法があります。

コンテキストで 依存性注入 が許可されている場合は、entity_type.managerサービスを使用して、次のように使用します。

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

そうでない場合でも、entity_type.managerサービス:

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

必要に応じて、Nodeクラスを直接使用できます。

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

エンティティをデータベースからロードする必要がある場合、またはデータベースからロードせずに作成する必要がある場合は、newを使用してエンティティを作成することはありません。

ノードを作成する場合は、次のコード例のように、Node::create()を使用します。

  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); 

ノードIDを知っているデータベースからノードを単にロードする必要がある場合、コードははるかに簡単です。

  use Drupal\node\Entity\Node;

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

その後、他のプロパティを知っているが、ノードIDは知らないデータベースからノードをロードする必要がある場合は、次のコードを使用できます。

  use Drupal\node\Entity\Node;

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

$nodesは0個以上のノードを含む配列であり、$valuesは、知っているプロパティを説明する配列です。

4
kiamlaluno