logo

Palette - Rendila colorata🎨

Palette - Visual Page Builder. Non serve essere un designer.

Live demo Scarica Palette

Scorri
16/10/2025, by Ivan

Menu

Il lavoro con le entità in Drupal è unificato e tutte le operazioni CRUD (Create, Read, Update, Delete) sono le stesse per ogni tipo di entità. In questo articolo vedremo come lavorare con le entità nel codice personalizzato.

Iniziamo con esempi semplici.

Creare un nodo tramite programmazione

use \Drupal\node\Entity\Node;
 
$node = Node::create([
  'type'        => 'article',
  'title'       => 'Druplicon test',
]);
$node->save();

Per creare un nodo, è necessario aggiungere tutti i campi obbligatori; per impostazione predefinita è richiesto solo il campo Title. È inoltre possibile accedere all’oggetto nodo dopo la sua creazione:

$node = Node::create([
  'type'        => 'article',
  'title'       => 'Druplicon test',
]);
$node->field_text->value = 'Testo semplice';
$node->save();

Il metodo create() si trova nella classe Node.php. Se un tipo di entità dispone di un proprio metodo create(), è preferibile utilizzare quello. Tuttavia, esistono anche modi universali per creare un’entità.

$node_entity_type = \Drupal::entityTypeManager()->getDefinition('node');
$node = new Node([
  $node_entity_type->getKey('bundle') => 'movie',
  $node_entity_type->getKey('label') => 'Foo',
  'field_release_date' => '1/1/2015',
]);
$node->save();

Alla fine, utilizzando il metodo save(), salviamo l’entità.

Aggiornare un nodo (entità) tramite programmazione

$nid = 234; 
$node_storage = \Drupal::entityTypeManager()->getStorage('node');
$node = $node_storage->load($nid);
 
$node->title = 'Nuovo titolo';
$node->field_text = 'testo';
 
$node->save();

Abbiamo trattato in dettaglio la modifica dei campi di un’entità nell’articolo precedente:

http://drupalbook.org/drupal/9111-work-entity-fields-programmatically

Eliminare un nodo (entità) tramite programmazione

Se vuoi eliminare un singolo nodo, puoi farlo utilizzando il metodo delete():

$nid = 123;
$node = node_load($nid);
$node->delete();

Creare più nodi (entità) tramite programmazione

Quando devi caricare molti nodi, farlo uno per uno può risultare dispendioso, poiché ogni nodo ha campi che richiedono molte query SQL per essere caricati dal database. È molto più veloce caricare tutti i nodi in un’unica operazione:

$nids = db_select('node_field_data', 'n')
  ->fields('n', ['nid'])
  ->condition('title', $my_title)
  // Il tag node_access controllerà i permessi di accesso.
  ->addTag('node_access')
  ->execute()
  ->fetchCol();
 
$nodes = Node::loadMultiple($nids);

Eliminare più nodi (entità) tramite programmazione

$result = \Drupal::entityQuery("node")
  ->condition('created', strtotime('-30 days'), '=')
  ->execute();
 
$storage_handler = \Drupal::entityTypeManager()->getStorage("node");
$entities = $storage_handler->loadMultiple($result);
$storage_handler->delete($entities);