Construction automatique et schéma de base de données

Construction automatique et schéma de base de données --  Création des classes de base et du schéma de la base de données

Que fais le constructeur automatique ? (createTables.php)

Une des fonctionnalités essentielles de l'outil de construction SQL est d'avoir une compréhension de la structure de la base de données, donc les entiers peuvent être vérifiés et les chaînes de caractères peuvent être échappées. Il y a différentes façons d'exécuter des requêtes sur une base de données pour une structure de table

DB_DataObject utilise la dernière de ces trois méthodes normalement (voir la section sur les alternatives), il utilise la fonction parse_ini_file pour lire le fichier, donc, il est relativement rapide. Sinon, il est nécessaire de passer par une phase d'initialisation de DB_DataObject avant de pouvoir l'utiliser.

L'autre concept principal de DB_DataObject est que vous travaillez avec une extension de la classe DB_DataObject, ce qui fait que tout ce qui est relatif à la table fonctionne. L'initialisation de cette classe pour une grosse base de données peuvent être couteux en terme de temps d'exécution, donc le fichier createTables.php construira automatiquement le squelette pour tous ces fichiers de la classe.

Pour démarrer le constructeur automatique, allez simplement dans le dossier pear/DB/DataObject/ et tapez (si vous êtes sous Windows) la ligne de commande suivante : c:\php4\php.exe createTables.php myconfig.ini. Cela lira votre fichier de configuration et génèrera tous les classes de base ainsi que les fichiers de définitions de données.

Depuis la version 1.5, vous pouvez utiliser l'option "proxy = full", ce qui fera que DataObjects créera des classes et des schémas à la volée, plutôt que d'utiliser un fichier ini ou des classes de pré-construction.

définition de la classe par défaut

La classe générée par défaut ressemble à ceci.

La classe définie le nom de la table, et les commentaires quelques colonnes de la table suivant vos préférences, il ajoute aussi la méthode staticGet() qui peut être utilisée pour récupérer rapidement des lignes simples de l'objet. Vous devrez ajouter votre code spécifique à la table après le tag ###END_AUTOCODE.

Avant la version 1.6, une méthode nommée __clone avait été créée ; PHP5 ayant imposé d'utiliser $x = clone($y);, cette méthode a été supprimée. DataObjects crée maintenant une fonction factice de clonage (si nécessaire), pour activer la compatibilité ascendante.

Fichier de schéma de base de données

Le fichier de définitions de base de données généré par défaut ressemble à ceci, il est situé dans le dossier renseigné par l'option de configuration "schema_location" et son nom est identique au nom de la base de données.

Si vous renommez la base de données, vous devez également regénérer le fichier ou le copier pour correspondre au nouveau nom.

Si vous changez la structure de la base de données (e.g ajout d'une colonne ou changement du type), vous devez regénérer le fichier contenant le schéma, en utilisant le fichier createTables.php. Actuellement, cela n'est pas fait automatiquement (bien que cela devrait être ajouté prochainement).

Vous ne devriez pas éditer ce fichier manuellement (sinon, tous les changements risqueraient d'être perdus lors de la regénération). Vous pouvez effacer les clés d'une table en utilisant l'option de configuration "sequence_{table} = key" ou en définissant la méthode sequenceKey() de votre classe étendue.

Le bloc indique soit les tables et leur type de champs par addition binaire (1=integer,2=string,128=not null, donc 129=integer et not null) soit une liste de clés pour chaque table. Vous ne devriez pas avoir à éditer ce fichier.

Alternatives à l'utilisation d'un fichier de schéma

Il est possible d'utiliser DataObjects sans fichier de schéma ; cela, de deux façons :

La seconde méthode est détaillé dans la page des méthodes keys() and tables().

Ci-dessous, une classe écrite manuellement qui n'utilise pas un fichier de schéma schema.ini.

Elle est prévue pour retourner une valeur depuis une méthode, plutôt qu'une variable objet, donc, l'affichage de print_r(), qui n'inclue pas des informations supplémentaires (et devrait être plus petit que l'affichage d'un jeux de résultat large).