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
sur chaque requête SQL
à l'initialisation de chaque page web.
Une seule fois, lors du lancement de l'application et puis, stockage dans un fichier
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.
La classe générée par défaut ressemble à ceci.
Une classe étendue générée
<?php
/*
* Définition de la table 'group'
*/
class DataObjects_Grp extends DB_DataObject {
###START_AUTOCODE
/* le code ci-dessous est généré automatiquement, n'effacez pas la balise ci-dessus */
var $__table='group'; // table name
var $id; // int primary_key
var $name; // string
var $grp_owner; // int
var $official; // string
var $street; // string
var $postcode; // string
var $city; // string
var $homepage; // string
var $email; // string
var $extra; // blob
/* Récupération statique */
function staticGet($k,$v=NULL) { return DB_DataObject::staticGet('DataObjects_Grp',$k,$v); }
/* le code ci-dessous est généré automatiquement, n'effacez pas la balise ci-dessous */
###END_AUTOCODE
}
?>
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.
Le fichier de définitions de base de données généré par défaut ressemble à celui ci-dessous. 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.
Fichier de configuration de base de données
[group] id = 129 name = 130 grp_owner = 129 official = 130 street = 130 postcode = 130 city = 130 homepage = 130 email = 130 extra = 130 [group__keys] id = N
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.
Il est possible d'utiliser DataObjects sans fichier de schéma ; cela, de deux façons :
en définissant les méthodes table() and keys() dans une extension de la classe
en passant un tableau aux méthodes table() and keys() lorsque vous avez une instance de dataobjects
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'inclu pas d'informations supplémentaires (et devrait être plus petit que l'affichage d'un jeux de résultat large).
Une extension de classe écrite manuellement
<?php
/*
* Définition de la table 'group'
*/
class DataObjects_Grp extends DB_DataObject {
// vous pouvez définit cela vous-même
var $__table='group'; // nom de la table
var $id; // int primary_key
var $name; // string
var $bday; // string
var $last; // datetime
var $active; // tinyint(1)
var $desc; // text
var $photo; // blob
// ceci est utile avec un fichier généré automatiquement
/* récupération statique */
function staticGet($k,$v=NULL) { return DB_DataObject::staticGet('DataObjects_Grp',$k,$v); }
// maintenant, définissez votre structure de table
// les clés sont les noms de colonnes, les valeurs, les tpyes
function table() {
return array(
'id' => DB_DATAOBJECT_INT,
'name' => DB_DATAOBJECT_STR,
'bday' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE,
'last' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME,
'active' => DB_DATAOBJECT_INT + DB_DATAOBJECT_BOOL,
'desc' => DB_DATAOBJECT_STR + DB_DATAOBJECT_TXT,
'photo' => DB_DATAOBJECT_STR + DB_DATAOBJECT_BLOB,
);
}
// maintenant, définissez les clés
function keys() {
return array('id');
}
}
?>