peLmeL.org
Accueil du site > peLmeL Blog > Drupalium > Pense-Bête : Les fonctions de modification des schémas

Pense-Bête : Les fonctions de modification des schémas

dimanche 24 octobre 2010, par Brice Favre


Principe

Dans les modules de drupal, on trouve des fichiers à l’extension .install permettant d’installer des schémas de bases de données. Pour permettre de faire évoluer ce schéma, l’API drupal propose des fonctions permettant d’ajouter, supprimer, modifier des champs dans le schéma. Ces opérations sont exécuté lors d’un changement de version d’un module, en appellant le fichier update.php depuis votre navigateur.

Ce billet à pour objectif de décrire les variables utilisées, présenter comment implémenter les fonctions, et liste les fonctions de l’API.

Variables :

Avant tout une petite indication sur les variables utilisés $table, $field, et $spec

  1. // La variable table est une chaine de caractères contenant le nom de la table
  2. // Exemple :
  3. $table = 'users';
  4.  
  5. // La variable field est une chaine de caractères contenant le nom du champ impacté
  6. // Exemple :
  7. $field = 'my_field';
  8.  
  9. // La variable spec est un tableau contenant les spécifications du champ
  10. // Exemple :
  11. $spec = array('type' => 'int', 'size' => 'tiny', 'not null' => TRUE, 'default' => 0)

Eléments standards lors d’une modification de schéma.

  1. function hook_update_n(){
  2.   $ret = array();
  3.   // Modification du schéma
  4.   return $ret;
  5. }

La fonction de mise à jour est une fonction hook de forme hook_update_N où N est l’identificant de la mise à jour. Sur la documentation de ce hook on peut lire que N doit être de la forme suivante

- 1 digit pour indiquer la compatibilité avec Drupal (5, 6 ou 7)
- 1 digit indiquant la version majeur du module au moment de l’update
- 2 digits permettant de compter les mise à jour et commençant par 00

Si vous consultez les fichiers .install de vos modules préférés, vous pourrez ainsi suivre l’évolution de ceux ci, et détecter d’éventuelles erreurs ou incompatibilités.

Les fonctions implémentants ce hook doivent retourner un tableau contenant la liste des requêtes. Ce tableau est passer en paramètre des fonctions que je vous présente plus loin. Si vous désirez executer des requuêtes SQL il faudra utiliser la fonction

update_sql

et ajouter le retour de cette fonction dans le tableau de retour :

  1. $ret[] = update_sql("INSERT INTO matable(libelle) value('monlibelle')");

Les fonctions :

  1. // Tableau contenant les requêtes executées
  2. $ret = array();
  3.  
  4. // Enlever une clé primaire
  5. db_drop_primary_key($ret, 'table');
  6.  
  7. // Enlever un clé unique
  8. db_drop_unique_key($ret, 'table', 'sid_nid');
  9.  
  10. // Ajouter un champ
  11. db_add_field($ret, $table, $field, $spec);
  12.  
  13. // Enlever un champ
  14. db_drop_field($ret, $table, $field);
  15.  
  16. // Changement des caractéristiques du champ
  17. // le troisième et quatrième paramètre peuvent être identique
  18. db_change_field($ret, $table, $field, 'nom_nouveau_champ', $spec, $keys);

Répondre à cet article


Suivre la vie du site RSS 2.0 | Plan du site | Espace privé | SPIP | squelette