logo

Extra Block Types (EBT) - Neue Erfahrung im Layout Builder❗

Extra Block Types (EBT) - gestylte, anpassbare Blocktypen: Diashows, Registerkarten, Karten, Akkordeons und viele andere. Eingebaute Einstellungen für Hintergrund, DOM Box, Javascript Plugins. Erleben Sie die Zukunft der Layouterstellung schon heute.

Demo EBT-Module EBT-Module herunterladen

❗Extra Absatztypen (EPT) - Erfahrung mit neuen Absätzen

Extra Paragraph Types (EPT) - analoger, auf Absätzen basierender Satz von Modulen.

Demo EPT-Module EPT-Module herunterladen

Scroll

9.13. Arbeiten mit der Datenbank in Drupal

27/05/2025, by Ivan

Es ist ein häufiger Anwendungsfall bei der Entwicklung von Drupal-Modulen, Datenbankabfragen auszuführen. Sie sollten entityQuery verwenden, wo es möglich ist, aber manchmal ist es nötig, eine SQL-Abfrage zu nutzen, um komplexere Daten zu erhalten.

Sie können sich diese Seite als Lesezeichen speichern, um immer eine praktische Übersicht zu haben, wie man MySQL-Abfragen select, insert, update, delete in Drupal ausführt.

Select

Einzelnen Wert erhalten:

$query = \Drupal::database()->select('node_field_data', 'n');
$query->addField('n', 'nid');
$query->condition('n.title', 'About Us');
$query->range(0, 1);
$nid = $query->execute()->fetchField();

Eintrag als Array erhalten:

$query = \Drupal::database()->select('node_field_data', 'n');
$query->fields('n', ['nid', 'title']);
$query->condition('n.type', 'page');
$query->range(0, 1);
$vegetable = $query->execute()->fetchAssoc();

Sie können auch ->fetchObject(), ->fetchAll() verwenden, um Einträge als Objekte zu erhalten.

LIKE in der Abfrage verwenden:

$query = \Drupal::database()->select('node_field_data', 'n');
$query->fields('n', ['nid', 'title']);
$query->condition('n.type', 'page');
$query->condition('n.title', $query->escapeLike('About') . '%', 'LIKE');
$vegetable = $query->execute()->fetchAllKeyed();

Select-Abfrage mit JOIN:

$query = \Drupal::database()->select('node_field_data', 'n');
$query->fields('n', ['nid', 'title']);
$query->addField('u', 'name');
$query->join('users_field_data', 'u', 'u.uid = n.uid');
$query->condition('n.type', 'page');
$vegetable = $query->execute()->fetchAllAssoc('nid');

Nachfolgend finden Sie Beispiele für andere Datenbankabfragen: insert, update, upsert und delete. Diese Abfragen können beim Arbeiten mit benutzerdefinierten Tabellen nützlich sein. Es ist jedoch besser, zweimal darüber nachzudenken, bevor man eigene Tabellen verwendet. Es ist vorzuziehen, die Drupal-API oder Contrib-Module zu nutzen. Wenn Sie sich dennoch entscheiden, eigene Datenbankabfragen zu schreiben, finden Sie hier Beispiele:

Insert

$query = \Drupal::database()->insert('flood');
$query->fields([
  'event',
  'identifier'
]);
$query->values([
  'My event',
  'My indentifier'
]);
$query->execute();

Sie können values() mehrfach aufrufen, um mehrere Datensätze gleichzeitig einzufügen.

Update

$query = \Drupal::database()->update('flood');
$query->fields([
  'identifier' => 'My new identifier'
]);
$query->condition('event', 'My event');
$query->execute();

Upsert

$query = \Drupal::database()->upsert('flood');
$query->fields([
  'fid',
  'identifier',
]);
$query->values([
  1,
  'My indentifier for upsert'
]);
$query->key('fid');
$query->execute();

Die Methode key() dient dazu, den Namen des Feldes zu beschreiben, das zum Bestimmen des vorhandenen Datensatzes verwendet wird. Sie müssen keine condition() schreiben, Sie können die Methode key() verwenden. Das in key() verwendete Feld muss eindeutig sein, z. B. nid, uid, tid, fid oder andere IDs von Entitäten. Wenn der Schlüssel nicht existiert, wird anstelle eines Updates ein neuer Datensatz mit dem angegebenen Schlüssel eingefügt.

Delete

$query = \Drupal::database()->delete('flood');
$query->condition('event', 'My event');
$query->execute();

Das war's. Wenn Sie mehr Beispiele benötigen, schreiben Sie in die Kommentare. In den nächsten Tutorials werden wir uns ansehen, wie man benutzerdefinierte Drupal-Datenbankabfragen praktisch verwendet.