drupal 8カスタムモジュールで、ノードIDがある場合にノードオブジェクトを取得するにはどうすればよいですか?
$node = new Node($nid);
$node->save();`
しかし、このエラーが発生しました:
Drupal\Core\Entity\ContentEntityBase :: __ construct()に渡される引数1は、配列型、文字列型でなければなりません。
いくつかの方法があります。
コンテキストで 依存性注入 が許可されている場合は、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);
エンティティをデータベースからロードする必要がある場合、またはデータベースからロードせずに作成する必要がある場合は、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
は、知っているプロパティを説明する配列です。