web-dev-qa-db-fra.com

Comment puis-je exécuter une requête de base de données dans le code?

Je veux quelque chose comme SELECT nid FROM node WHERE type = "blablabla".

Comment faire cela en Drupal 8 PHP?

5
elterr1ble

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();
14
Kevin