Mises à jour et installation des tables

Lorsque SPIP s’installe, il utilise des fonctions pour installer ou mettre à jour ses tables. Les plugins peuvent aussi utiliser ces fonctions dans leur fichier d’installation.

Ces fonctions sont déclarées dans le fichier ecrire/base/create.php

Créer les tables

La fonction creer_base($connect='') crée les tables manquantes dans la base de données dont le fichier de connexion est donné par $connect. Par défaut, la connexion principale.

Cette fonction crée les tables manquantes (il faut évidemment qu’elles aient été déclarées), mais ne va rien modifier sur une table existante. Si la table est déclarée en tant que table principale (et non auxiliaire), et si la clé primaire est un entier, alors SPIP affectera automatiquement un type ’auto-increment’ à cette clé primaire.

Mettre à jour les tables

La fonction maj_tables($tables, $connect='') met à jour des tables existantes. Elle ne fera que créer les champs manquants ; aucune suppression de champ ne sera effectuée. Il faut indiquer le nom de la table (chaîne) ou des tables (tableau) à la fonction. Là encore, on peut indiquer un fichier de connexion différent de la base principale.

Si une table à mettre à jour n’existe pas, elle sera créée, suivant le même principe que creer_base() pour l’auto-increment.

Exemples :

include_spip('base/create');
creer_base();
maj_tables('spip_rubriques');
maj_tables(array('spip_rubriques','spip_articles'));

Mettre à jour les clés

Quand des nouvelles clés sont ajoutées dans la description de la table, la fonction maj_tables() les ajoute automatiquement.

Il suffit de faire appel à celle-ci dans la fonction de mise à jour du plugin :

$maj['1.2.0'] = array(array('maj_tables', array('spip_patates')));

Pour modifier une clé existante, il faut utiliser la fonction sql_alter().
Voici comment procède le plugin Rôles d’auteurs pour modifier une clé primaire :

$maj['create'] = array(
	// supprimer la clé primaire actuelle pour pouvoir en changer en ajoutant la colonne rôle
	array('sql_alter', "TABLE spip_auteurs_liens DROP PRIMARY KEY"),
	// ajout de la colonne role
	array('maj_tables', array('spip_auteurs_liens')),
	// la nouvelle colonne est la, mettre sa nouvelle clé primaire
	array('sql_alter', "TABLE spip_auteurs_liens ADD PRIMARY KEY (id_auteur,id_objet,objet,role)"),
);

Auteur Matthieu Marcillaud Publié le : Mis à jour : 12/03/23

Traductions : English, français, Nederlands