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?
Cela dépend de ce que vous essayez de réaliser.
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'
]);
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);
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();
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(" ... ");
}
}