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
01/10/2025, by Ivan

Per aggiungere una clausola WHERE a una query dinamica, utilizza il metodo condition():

$query->condition('bundle', 'article', '=');

Il codice sopra istruirà la query a filtrare i risultati per il bundle article. Nota che il nome del campo qui deve essere un alias creato dai metodi addField() o addExpression().

Parametri di Condition

Il metodo condition() accetta tre parametri:

  • $field - il campo da confrontare (obbligatorio).
  • $value - il valore da confrontare (opzionale, predefinito NULL).
  • $operator - l’operatore di confronto (opzionale, predefinito ‘=’).

Operatori supportati

Gli operatori di confronto comuni '=', '<>', '<', '<=', '>', '>=' sono supportati in tutti i tipi di database supportati.

Utilizzo di IN, NOT IN

Gli operatori IN e NOT IN accettano un array in $value e confrontano il valore del campo con i valori dell’array.

$users = [2,5,17,22];
$query->condition('uid', $users, 'IN');

In questo esempio la query restituirà i record in cui uid è uguale a 2, 5, 17 o 22.

Utilizzo di BETWEEN e NOT BETWEEN

Gli operatori BETWEEN e NOT BETWEEN accettano un array di due valori per il confronto.

$query->condition('count', [5,10], 'BETWEEN');

In questo esempio la query restituirà i record con count compreso tra 5 e 10.

Utilizzo di IS NULL, IS NOT NULL, EXISTS e NOT EXISTS

Per convenzione, utilizza i seguenti metodi invece del metodo condition():

$query->isNull($field);
$query->isNotNull($field);
$query->exists($field);
$query->notExists($field);

Anche se una condizione come $query->condition($field, NULL, 'IS NOT NULL'); dovrebbe funzionare, la convenzione sopra è raccomandata.

Altri operatori

Altri operatori, come BINARY o altri specifici per il database in uso, potrebbero funzionare o meno. Tienilo a mente quando sviluppi moduli che possono essere usati su diversi sistemi.

Utilizzo di più Conditions

È possibile aggiungere più metodi condition() per filtrare ulteriormente la query.

$query->condition('bundle', 'article', '=');
$query->condition('status', 1, '=');

Se esistono più condition(), come nell’esempio sopra, tutte le condizioni devono essere vere affinché un record appaia nel risultato della query (cioè le condizioni sono combinate con AND).

Suggerimento: per ottenere una query con condizioni solo OR, usa una orConditionGroup.

Gruppi di Conditions

I gruppi di condizioni possono essere usati per creare espressioni WHERE più complesse (incluso OR) all’interno della clausola della query. Esistono due tipi di gruppi di condizioni:

  • orConditionGroup - restituisce un oggetto di condizioni unite con OR
  • andConditionGroup - restituisce un oggetto di condizioni unite con AND

I gruppi di condizioni restituiscono un oggetto, che può poi essere aggiunto come condizione alla query.

// Crea l’orConditionGroup
$orGroup = $query->orConditionGroup()
  ->condition('promoted', 1)
  ->condition('uid', [2,4,7,22], 'IN');
  
// Aggiungi il gruppo alla query.
$query->condition($orGroup);

In questo esempio le condizioni per promoted e uid vengono aggiunte alla clausola WHERE della query, raggruppate insieme con OR. Questo porterà a una WHERE che appare così:

WHERE (promoted = 1 OR uid IN (2,4,7,22))

Se necessario, è possibile aggiungere più gruppi orConditionGroup e andConditionGroup. I gruppi di condizioni possono essere annidati per esigenze WHERE più complesse.

Dato il seguente esempio di clausola WHERE:

WHERE (a = 1 OR b = 1) AND ((c = 1 AND d = 1) OR (e = 1))

Le condizioni della query possono essere scritte con gruppi di condizioni come segue:

$orGroup1 = $query->orConditionGroup()
  ->condition('a', 1)
  ->condition('b', 1);
  
$andGroup1 = $query->andConditionGroup()
  ->condition('c', 1)
  ->condition('d', 1);
  
$orGroup2 = $query->orConditionGroup()
  ->condition($andGroup1)
  ->condition('e', 1);
  
$query->condition($orGroup1);
$query->condition($orGroup2);