web-dev-qa-db-fra.com

Comment créer une requête dans Drupal 8

Je suis habitué à utiliser db_select dans drupal 7 mais maintenant il est déconseillé dans drupal 8

Donc, si je dois créer une requête pour répertorier tous les utilisateurs de users_field_data table, que dois-je faire?

Dois-je toujours utiliser db_select ou db_query même si ce sont des fonctions obsolètes? Ou créez un nouveau contrôleur à étendre à partir de "Select class "et faire ma requête?

11
Mina Adel

Cela dépend de ce que vous essayez de réaliser.


Utilisation de l'objet de stockage

Si vous voulez faire une simple requête sur les utilisateurs, vous devez utiliser les loadByProperties de l'objet de stockage

$users = \Drupal::entityTypeManager()->getStorage('user')->loadByProperties([
  'name' => 'bar'
]);

Utilisation de l'entité query & loadMultiple

Si vous avez besoin d'une requête plus complexe avec des tris, une plage, un pager et des groupes de conditions OR/AND, vous devez utiliser la requête d'entité

$ids = \Drupal::entityQuery('user')->condition('name', 'foo')->execute();
$users = User::loadMultiple($ids);
17
Eyal

db_select, db_insert, db_update, etc. ont été dépréciés dans Drupal 8.0.x, sera supprimé dans Drupal 9.0.0. Au lieu de cela, obtenez une connexion à la base de données injectée dans votre service à partir du conteneur et appelez select () dessus. Par exemple, $ injected_database-> select ($ table, $ alias, $ options);

par exemple:

$db = \Drupal::database();

$data = $db->select('table_name','t')->fields('t')->execute();

$db->insert();

$db->update();
8
Rijin

Comme mentionné dans la documentation, vous pouvez interroger des données en injectant la classe de connexion à la base de données de Drupal. Par exemple:

use Drupal\Core\Database\Connection;

class DatabaseQueryExample {

  protected $connection;

  public function __construct(Connection $connection) {
    $this->connection = $connection;
  }

  public function queryExamples() {
    // db_query()
    $this->connection->query(" ... ");
    // db_select()
    $this->connection->select(" ... ");   
  }

}
8
baikho