web-dev-qa-db-fra.com

Comment ajouter une colonne s'il n'en existe pas lors de l'installation d'un composant?

J'aimerais savoir lors de l'installation d'un composant sur un composant existant, s'il est possible d'ajouter une nouvelle colonne si elle n'existe pas.

Par exemple Dans install.mysql.utf8.sql, je vais avoir quelque chose comme:

IF NOT EXISTS(
    SELECT * FROM information_schema.COLUMNS
    WHERE COLUMN_NAME='new_column' AND TABLE_NAME='#__my_table' AND TABLE_SCHEMA='my_schema'
    )
    THEN
        ALTER TABLE `#__my_table`
        ADD COLUMN `new_column` VARCHAR (30) NOT NULL COLLATE utf8_general_ci;
END IF; 

Comme montré ci-dessus, le problème est que comment allons-nous obtenir le TABLE_SCHEMA au lieu de définir my_schema explicitement?

Ou

Y a-t-il une meilleure alternative?

REMARQUE: La raison pour laquelle nous ne pouvons pas utiliser de mises à jour pour ajouter une nouvelle colonne est que de nombreux sites Web ont été créés à l'aide des mêmes composants personnalisés, mais avec des colonnes supplémentaires différentes qui ont déjà été ajoutées manuellement aux tables individuelles et ne sont pas incluses dans la première. version.

1
kolunar

Utilisez script d'installation/de mise à jour . Vous avez accès à la structure à cet égard et vous pouvez exécuter des requêtes SQL pour vérifier les colonnes de la table.

1
Artur Stępień