Felder
Feld hinzufügen
Um ein Feld zu einer Select-Abfrage hinzuzufügen, verwenden Sie die Methode addField():
$title_field = $query->addField('n', 'title', 'my_title');
Der obige Code weist die Abfrage an, das Feld „title“ der Tabelle mit dem Alias „n“ auszuwählen und diesem das Alias „my_title“ zu geben. Wenn kein Alias angegeben wird, wird automatisch eines generiert. In den meisten Fällen entspricht das generierte Alias einfach dem Feldnamen. In diesem Beispiel wäre das „title“. Falls dieses Alias bereits existiert, wird das Alias aus Tabellenalias und Feldname zusammengesetzt, also „n_title“. Sollte auch dieses bereits existieren, wird ein Zähler angehängt, bis ein freies Alias gefunden ist, z.B. „n_title_2“.
Beachten Sie, dass wenn Sie eine Abfrage selbst erstellen und kein Alias angeben, und das Standardalias nicht verfügbar ist, sehr wahrscheinlich ein Fehler im Code vorliegt. Wenn Sie jedoch eine Implementierung von hook_query_alter() schreiben, können Sie nicht genau wissen, welche Aliase bereits verwendet werden. Deshalb sollten Sie dort immer das generierte Alias verwenden.
Mehrere Felder hinzufügen
Um mehrere Felder auszuwählen, rufen Sie addField() mehrmals in der gewünschten Reihenfolge auf. In den meisten Fällen sollte die Reihenfolge der Felder keine Rolle spielen; falls doch, liegt wahrscheinlich ein Fehler in der Geschäftslogik des Moduls vor.
Alternativ können Sie die Methode fields() verwenden, um mehrere Felder gleichzeitig hinzuzufügen.
$query->fields('n', ['nid', 'title', 'created', 'uid']);
Obiger Aufruf entspricht vier einzelnen addField()-Aufrufen, jeweils für ein Feld. fields() unterstützt jedoch keine Angabe von Aliasen für Felder. Außerdem gibt es das Query-Objekt selbst zurück, sodass Methodenaufrufe verketten können, ohne generierte Aliase zurückzugeben. Wenn Sie die generierten Aliase benötigen, verwenden Sie addField() oder getFields(), um auf die Rohdatenstruktur der Felder zuzugreifen.
Ein Aufruf von fields() ohne Feldliste führt zu einer SELECT * -Abfrage.
$query->fields('n');
Dies führt dazu, dass „n.*“ in der Select-Liste enthalten ist. Beachten Sie, dass dabei keine Aliase generiert werden. Wenn eine Tabelle mit SELECT * ein Feld enthält, dessen Name auch direkt aus einer anderen Tabelle ausgewählt wird, kann es zu Namenskollisionen im Result-Set kommen. In diesem Fall enthält das Ergebnis nur eines der Felder mit demselben Namen. Deshalb wird die Verwendung von SELECT * nicht empfohlen.
Nur ein Feld zurückgeben mit fetchField
Verwenden Sie die Methode fetchField, um nur ein Feld aus der Abfrage zurückzugeben, z.B. wie folgt (ein etwas triviales Beispiel):
$query = $connection->select('node', 'n'); $query->condition('n.nid', 123); $query->addField('n', 'title'); $result = $query->execute(); return $result->fetchField();
Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.