
Toute requĂȘte peut avoir une « requĂȘte de comptage » correspondante. Une requĂȘte de comptage renvoie le nombre de lignes du rĂ©sultat de la requĂȘte initiale. Pour obtenir une requĂȘte de comptage Ă partir d'une requĂȘte existante (qui est un objet de requĂȘte select implĂ©mentant SelectInterface), utilisez la mĂ©thode countQuery().


Certaines requĂȘtes SQL peuvent retourner des rĂ©sultats en double. Dans ces cas, les lignes dupliquĂ©es peuvent ĂȘtre filtrĂ©es en utilisant le mot-clĂ© « DISTINCT » dans une requĂȘte statique. Dans une requĂȘte dynamique, utilisez la mĂ©thode distinct().


Pour grouper par un champ donné, utilisez la méthode groupBy().
$query->groupBy('uid');
Le code ci-dessus indique Ă la requĂȘte de grouper par le champ uid. Notez que le nom du champ doit ici ĂȘtre un alias, créé par les mĂ©thodes addField() ou addExpression(), donc dans la plupart des cas, vous voudrez utiliser la valeur retournĂ©e par ces mĂ©thodes pour garantir que lâalias correct est utilisĂ©.
Pour obtenir le nombre de lignes groupées par un champ, par exemple uid, vous pouvez faire ce qui suit :


Pour ajouter une clause WHERE Ă une requĂȘte dynamique, utilisez la mĂ©thode condition() :
$query->condition('bundle', 'article', '=');
Le code ci-dessus indique Ă la requĂȘte de filtrer les rĂ©sultats pour le type de contenu « article ». Notez que le nom du champ ici doit ĂȘtre un alias créé par les mĂ©thodes addField() ou addExpression().
ParamĂštres de Condition
La méthode condition() prend trois paramÚtres :


Une requĂȘte Select renverra toujours un objet jeu de rĂ©sultats contenant zĂ©ro ou plusieurs enregistrements. Il existe plusieurs façons d'extraire des donnĂ©es de ce jeu de rĂ©sultats selon le cas d'utilisation. Par dĂ©faut, les enregistrements sont extraits en tant qu'objets, sauf si vous modifiez le mode d'extraction (voir : setFetchMode).


Les requĂȘtes peuvent ĂȘtre extraites en objets basĂ©s sur des classes personnalisĂ©es. Par exemple, si nous avons une classe nommĂ©e ExampleClass, la requĂȘte suivante retournera des objets de type ExampleClass.
$result = $connection->query("SELECT id, title FROM {example_table}", [], [ 'fetch' => 'ExampleClass', ]);
Si la classe possĂšde une mĂ©thode __construct(), les objets seront créés, les propriĂ©tĂ©s seront ajoutĂ©es Ă l'objet, puis la mĂ©thode __construct() sera appelĂ©e. Par exemple, si vous avez la classe suivante et la requĂȘte suivante.


Les requĂȘtes d'insertion doivent toujours utiliser un objet constructeur de requĂȘtes. Dans certaines bases de donnĂ©es, un traitement spĂ©cial des champs LOB (Large OBject, par exemple TEXT dans MySQL) et BLOB (Binary Large OBject) est nĂ©cessaire, ce qui demande un niveau d'abstraction pour que les diffĂ©rents pilotes de bases de donnĂ©es puissent implĂ©menter le traitement spĂ©cifique requis.
Les requĂȘtes d'insertion sont lancĂ©es en utilisant la mĂ©thode insert() de la maniĂšre suivante :


Les requĂȘtes de fusion reprĂ©sentent un type particulier de requĂȘte hybride. Bien que leur syntaxe soit dĂ©finie dans la spĂ©cification SQL 2003, pratiquement aucune base de donnĂ©es ne supporte la syntaxe standard. Cependant, la plupart fournissent une implĂ©mentation alternative utilisant une syntaxe spĂ©cifique Ă la base de donnĂ©es. Le constructeur de requĂȘtes de fusion dans Drupal abstrait le concept de requĂȘte de fusion en un objet structurĂ© qui peut ĂȘtre compilĂ© avec la syntaxe appropriĂ©e pour chaque base de donnĂ©es.


Les requĂȘtes de suppression doivent toujours utiliser un objet constructeur de requĂȘtes. Elles sont exĂ©cutĂ©es en utilisant la mĂ©thode delete() de la maniĂšre suivante :
$query = $connection->delete('mytable', $options);
Cela crĂ©e un objet de requĂȘte de suppression qui supprime des enregistrements de la table mytable. Notez que les accolades ne sont pas nĂ©cessaires pour le nom de la table, car le constructeur de requĂȘtes s'en chargera automatiquement.


Drupal prend Ă©galement en charge les transactions, y compris une alternative transparente pour les bases de donnĂ©es qui ne supportent pas les transactions. Cependant, les transactions peuvent devenir assez complexes si vous essayez dâexĂ©cuter deux transactions simultanĂ©ment. Le comportement dans ce cas dĂ©pend aussi de la base de donnĂ©es.
