RSS
 

Migration et schémas SQL – Zoom sur la doc

10 mar

CakePHP : Framework de RAD en PHP

Aujourd’hui je souhaitais mettre en avant une fonctionnalité récemment découverte du framework CakePHP. Dans plusieurs applications j’ai trouvé des fichiers sql dans le dossier « /config/sql« , mais ce n’est que maintenant que je viens de me rendre compte de l’existence d’un shell intégré à CakePHP permettant de gérer les dump, installation et mises à jour de la base de données : c’est notamment pratique dès lors que l’on versionne ces fichiers et qu’on les distribue.

Je vous invite donc à visiter la section bien rédigée de la documentation pour en savoir plus : Gestion du schéma et migrations.

Dans la suite de l’article je récapitulerai les principales commandes.

Tout d’abord, voici un lien vers l’API de la classe SchemaShell. Il vous faudra pouvoir lancer la Console de CakePHP pour effectuer les commandes ci-dessous.

Les commandes principales sont donc :

  • cake schema generate : pour générer un fichier schema.php (dans « /config/sql/« )contenant le schéma des tables liées aux modèles existants (par défaut les autres sont ignorées, mais si vous souhaitez les inclure il faut rajouter le paramètre « -f« ).

    • Note : Ce fichier sera une description générique de votre base de données et pourra en théorie être réimportée dans un autre SGBD

    • Si vous avez déjà effectué cette opération de génération, vous aurez deux options : Ecraser (taper « O »), Créer une autre image (taper « S »). Dans le premier cas, le fichier schema.php sera écrasé et remplacé par votre nouveau schéma, dans le second cas un fichier schema_X.php sera créé (X étant un entier incrémenté).
  • cake schema dump [nomdufichier.sql] : pour générer un « dump » SQL de votre base de données. Le dump est en fait une série d’intructions SQL propres à votre SGBD. Le paramètre de nom du fichier de sortie n’est pas obligatoire : si il est vide, le dump sera affiché dans la console.
  • cake schema run create : est le pendant de « generate ». Cela va donc créer une base de données d’après le contenu du fichier schema.php : attention, la base existante sera supprimée et recréée !
  • cake schema run update -s XX : permet de mettre à jour votre base de données en exécutant les commandes contenues dans le fichier de snapshot (-s) n° XX. Ainsi, si vous avez incrémentalement fait évoluer votre base de données vous pourrez la mettre à jour sans soucis !

Enfin, notez simplement que vous pouvez également « simuler » ces modifications en rajoutant le paramètre « -dry » au lancement de la commande. Désormais vous êtes prêts pour livrer vos applications proprement avec un déploiement sûr et efficace de votre base de données !

Connaissiez-vous cette fonctionnalité ? L’utilisez vous régulièrement ? Y a-t-il des inconvénients ou des problèmes d’après vous ? N’hésitez pas à réagir !

Pensez à utiliser mon flux RSS pour vous tenir au courant des futurs articles ! Vous pouvez aussi me retrouver sur Twitter pour une actualité plus fréquente.

 
4 Comments

Posted in En vrac

 

Tags: , ,

  • http://cherryonthe.popnews.com Guillaume

    La dernière fois que j’ai voulu utiliser cette fonctionnalité, je me suis trouvé coincé car elle ne gérait pas les applications utilisant plusieurs bases de données.

    https://trac.cakephp.org/ticket/5502

  • http://www.pierre-martin.fr Pierre MARTIN

    Ah oui, en effet c’est gênant !
    Les joies de la core team … un patch ne semble pas trop complexe a écrire cependant. Vivement le jour où j’aurai le temps de bosser sur CakePHP à temps plein : j’ajoute ce ticket à ma liste de tickets suivis !

    Merci pour ton retour.

  • Quentin

    Je débarque un peu sur ce post qui est très utile. Par contre, n'est-il pas possible de forcer l'utilisation de la console pour générer du SQL qui gère les foreignKey etc en fonction des modèles et de leurs associations ?

  • http://www.pierre-martin.fr/ Pierre Martin

    Bonjour,

    Ce n'est malheureusement pas quelque chose qui est possible actuellement car la classe « CakeSchema » utilisée est une modélisation générique et compatible avec différents systèmes de données. Cela inclue les versions de MySql ne supportant pas les clés étrangères …