logo

Extra Block Types (EBT) - Nuova esperienza con Layout Builder❗

Extra Block Types (EBT) - tipi di blocchi stilizzati e personalizzabili: Slideshows, Tabs, Cards, Accordion e molti altri. Impostazioni integrate per sfondo, DOM Box, plugin javascript. Vivi oggi il futuro della costruzione dei layout.

Demo moduli EBT Scarica moduli EBT

❗Extra Paragraph Types (EPT) - Nuova esperienza con Paragraphs

Extra Paragraph Types (EPT) - insieme di moduli basati su paragrafi in modo analogo.

Demo moduli EPT Scarica moduli EPT

Scorri

Lavorare con il database in Drupal 7 – Lezione 9 – Query di aggiornamento (UPDATE)

14/10/2025, by Ivan

Le query di aggiornamento devono sempre essere create utilizzando il costruttore di query. I diversi database hanno gestori specifici per i tipi di dati LOB (Large Object, come TEXT in MySQL) e BLOB (Binary Large Object), quindi è necessario un livello di astrazione per consentire ai driver di implementare i propri gestori specifici.

Le query di aggiornamento devono iniziare con la funzione db_update():

<?php
$query = db_update('node', $options);
?>

Creando questo oggetto di query di aggiornamento, andremo a modificare una o più righe nella tabella node. Nota che non è necessario racchiudere il nome della tabella tra parentesi graffe, poiché il costruttore di query lo gestisce automaticamente.

L’oggetto della query di aggiornamento utilizza il Fluent API, quindi tutti i metodi (eccetto execute()) restituiscono l’oggetto stesso, consentendo di concatenare le chiamate ai metodi. In molti casi, questo significa che la query non deve essere necessariamente salvata in una variabile.

Le query di aggiornamento sono semplici e consistono in un insieme di coppie chiave/valore, definite insieme a una o più condizioni WHERE. Analizzeremo la struttura completa del WHERE in una lezione successiva; per ora ne toccheremo solo i concetti di base.

Un tipico esempio di query di aggiornamento è il seguente:

<?php
/* Questo semplice esempio mostra come aggiornare i record nella tabella node */
$num_updated = db_update('node')
  ->fields(array(
    'uid' => 5,
    'status' => 1,
  ))
  ->condition('created', REQUEST_TIME - 3600, '>=')
  ->execute();
?>

L’esempio sopra è equivalente alla seguente query SQL:

UPDATE {node} SET uid=5, status=1 WHERE created >= 1221717405;

Questo esempio aggiornerà tutte le righe della tabella node create nell’ultima ora, impostando uid a 5 e status a 1. Il metodo fields() accetta un array associativo che definisce quali campi devono essere aggiornati e quali nuovi valori devono essere impostati. A differenza delle query di inserimento, UpdateQuery::fields() supporta solo array associativi. Inoltre, l’ordine degli elementi nell’array o nelle chiamate ai metodi non è importante.

Il metodo execute() restituisce il numero di righe effettivamente aggiornate dalla query. Tieni presente che “aggiornate” non significa “tutte quelle che corrispondono alle condizioni WHERE”. Ad esempio, se esistono già nodi con uid=5 e status=1, questi corrisponderanno alla condizione WHERE ma non verranno modificati, poiché i loro valori sono già identici a quelli della query. Pertanto, il numero restituito non rappresenta necessariamente il numero totale di righe che attualmente soddisfano le condizioni specificate.