Je veux quelque chose comme SELECT nid FROM node WHERE type = "blablabla"
.
Comment faire cela en Drupal 8 PHP?
Vous utiliseriez la couche d'abstraction de base de données .
$query = \Drupal::database()->select('node', 'n');
$query->addField('n', 'nid');
$query->condition('n.type', 'blablabla');
$results = $query->execute();
Quant à l'exécution de la requête, vous pouvez également récupérer les résultats de différentes manières .
Exemples:
$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');
Si vous êtes dans une classe, vous devez injecter les classes appropriées dans votre constructeur au lieu d'utiliser le conteneur statique Drupal. Mais puisque vous êtes dans une fonction de prétraitement, \Drupal::database()
est bien.
De 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');
}
Selon votre ou vos cas d'utilisation, vous pouvez également tirer parti de EntityQuery :
$query = \Drupal::entityQuery('node');
$query->condition('type', 'blablabla');
$results = $query->execute();
Veuillez noter que vous voudrez peut-être utiliser la table node_field_data
Au lieu de node
, mais votre requête est assez générique, il est donc difficile de le dire sans une meilleure requête.
Exemple, obtenez tous les nœuds de type publiés:
$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();
Ou:
$query = \Drupal::entityQuery('node');
$query->condition('type', 'blablabla');
$query->condition('status', 1);
$results = $query->execute();