I want something like SELECT nid FROM node WHERE type = "blablabla"
.
How do I do this in Drupal 8 PHP code?
Drupal Answers is a question and answer site for Drupal developers and administrators. It only takes a minute to sign up.
Sign up to join this communityYou would use the database abstraction layer.
$query = \Drupal::database()->select('node', 'n');
$query->addField('n', 'nid');
$query->condition('n.type', 'blablabla');
$results = $query->execute();
As for executing the query, you can also fetch results in various ways.
Examples:
$query = \Drupal::database()->select('node', 'n');
$query->addField('n', 'nid');
$query->condition('n.type', 'blablabla');
$results = $query->execute()->fetchAll();
$query = \Drupal::database()->select('node', 'n');
$query->addField('n', 'nid');
$query->condition('n.type', 'blablabla');
$results = $query->execute()->fetchAllAssoc('nid');
If you are within a class, you should inject the appropriate classes in your constructor instead of use the static Drupal container. But since you are in a preprocess function, \Drupal::database()
is fine.
From core/lib/Drupal.php
:
/**
* Returns the current primary database.
*
* @return \Drupal\Core\Database\Connection
* The current active database's master connection.
*/
public static function database() {
return static::getContainer()->get('database');
}
Depending on your use case(s), you can also leverage EntityQuery:
$query = \Drupal::entityQuery('node');
$query->condition('type', 'blablabla');
$results = $query->execute();
Please note that you may want to use node_field_data
table instead of node
, but your query is pretty generic so it is hard to tell without a better query.
Example, get all nodes of type that are published:
$query = \Drupal::database()->select('node_field_data', 'nfd');
$query->addField('nfd', 'nid');
$query->condition('nfd.type', 'blablabla');
$query->condition('nfd.status', 1);
$results = $query->execute();
Or:
$query = \Drupal::entityQuery('node');
$query->condition('type', 'blablabla');
$query->condition('status', 1);
$results = $query->execute();
$connection = \Drupal::database(); $query = $connection->query($sql); $result = $query->fetchAll();