web-dev-qa-db-ja.com

新しいノードを挿入するときにエンティティIDを取得するにはどうすればよいですか?

挿入されたエンティティのIDを取得するにはどうすればよいですか?

hook_ENTITY_TYPE_presave()hook_ENTITY_TYPE_insert()を使用しようとしていますが、どちらでもエンティティIDを取得できません。

hook_ENTITY_TYPE_presave()では、次のコードを使用しました。

 if ($entity->isNew()) {
    print $entity->id();
 }
1
latikas

IDはhook_ENTITY_TYPE_presave()では使用できません(prebeforeを意味するため、保存されていないため、データベースにはまだIDが割り当てられていません)、ただし、hook_ENTITY_TYPE_insert()で確実に使用できます。

これは機能します、例えば:

function MODULE_node_insert(NodeInterface $node) {
  // No need to check `isNew()`; if it's in an insert hook, it's new.
  $nid = $node->id();
}
4
Clive

私は同様のことをする必要がありました-これは私のために働きました:

function your_module_node_insert($node) {
  if ($node->getType() == 'your_node') {
        $node->setTitle('New entity ' . $node->id()); // to update title with node id
        $node->field_test = 'Id' . $node->id();  // or, to update a text field with node id
        $node->save();
  }
}
0
Peter E