Transtypage - Dates, Blobs et Null --
DB_DataObject_Cast ::date(), ::blob(), ::sql()
Travailler avec le transtypage (tout type excepté les chaînes de caractères et le
nombres)
Avertissement |
Ceci est expérimental !
Bien que ce soit documenté, c'est actuellement supporté uniquement
sur une liste limitée de base de données
(envoyez-moi des patchs si vous voulez que cela
supporte votre base de données favorites) et l'API interne devrait changer dans le futur...
|
DataObjects est une façon très simple de travailler avec les bases de données qui sont focalisées
sur les nombres et les chaînes de caractères.
Vous pouvez également l'utiliser sur les champs date (bien que vous deviez formater vos
chaînes correctement) et vous pouvez l'utiliser avec d'autres types en utilisant des requêtes SQL
spéciales, et la chaîne de caractères "null" est automatiquement convertie
en NULL dans la base de données.
Dans un but de fournir une façon claire de coder les types riches de base de données, l'objet
DB_DataObject_Cast a été créé.
Il propose de créer simplement un objet représentant la plus part des types les moins
fréquemment utilisés. A suivre, un exemple d'utilisation pour créer quelques types simples.
L'objet de transtypage peut être utilisé dans la construction de la requête et dans l'assignement
de valeurs.
Exemple 34-1. L'objet de transtypage pour construire et assigner des valeurs <?php
// utiliser l'objet de transtypage pour construire une requête.
$person = DB_DataObject::factory('person');
// assigner la valeur d'un anniversaire par un objet de transtypage avec une date.
$person->birthday = DB_DataObject_Cast::date(2000,12,30);
$person->find();
while ($person->fetch()) {
echo "{$person->name} a son anniversaire le 30 décembre 2002<br />";
}
// utiliser l'objet de transtypage pour assigner des valeurs.
$person = DB_DataObject::factory('person');
$person->get(12);
// définir l'anniversaire de la personne au 30 décembre 2000
$person->birthday = DB_DataObject_Cast::date(2000,12,30);
// maintenant, on met à jour la base de données.
$person->update();
?> |
|
Comme vous pouvez le voir, ce composant est basique, donc, si vous voulez d'autres
fonctionnalités, si vous avez des idées, n'hésitez surtout pas à me contacter à l'adresse
email alan_k at php dot net.
Les types Blob et String
Les champs de type Blob peuvent stocker une grande quantité de données binaires dans une
base de données.
Actuellement, seuls les types Blob sont supportés dans PostGres en utilisant le type de bites.
(merci de me contacter avec un patch pour les autre bases de données)
Exemple 34-2. Insertion d'une photo et d'un gros fichier texte <?php
$person = DB_DataObject::factory('person');
$person->name = 'fred'
// utilisation d'un champs de type Blob pour des données binaires.
$person->photo = DB_DataObject_Cast::blob(file_get_contents('xxx.jpg'));
// utilisation d'une chaîne de caractères pour les données textuelles dans un champs de type Blob.
$person->xmldocs = DB_DataObject_Cast::string(file_get_contents('xxx.xml'));
// maintenant, on insert dans la base de données.
$person->insert();
?> |
|
Le type Date
La plupart des dates sont stockées dans une base de données au format standard ISO, cette
méthode vous permet de créer des types Date, depuis soit l'année, le mois, le jour,
humainement lisibile (jour/mois/année) ou au format ISO standard année-mois-jour.
Il complète les valeurs restantes en se basant sur des règles simples.
Exemple 34-3. Insertion d'une date dans divers formats <?php
$person = DB_DataObject::factory('person');
$person->name = 'fred'
// utilisation d'une date humainement lisibile
// format complet
$person->birthday = new DB_DataObject_Cast::date('21/12/2003');
// utilisation seulement du mois/année - actuellement définie au 1 décembre 2003
$person->expires = DB_DataObject_Cast::date('12/2003');
// utilisation uniquement de l'année - actuellement définie au 1 jan 2003
$person->expires = DB_DataObject_Cast::date(2003);
// utilisation du format standard ISO
// format complet
$person->birthday = DB_DataObject_Cast::date('2003-12-21');
// utilisation seulement du année-mois - actuellement définie au 1 décembre 2003
$person->expires = DB_DataObject_Cast::date('2003-12');
// utilisation d'une syntaxe avec tableau
// format complet
$person->birthday = DB_DataObject_Cast::date(2003,12,21);
// utilisation seulement du année-mois - actuellement définie au 1 décembre 2003
$person->expires = DB_DataObject_Cast::date(2003,12);
// les valeurs réelles sont sotckées dans una variable objet
echo $person->birthday->year; // affiche 2003
echo $person->birthday->month; // affiche 12
echo $person->birthday->day; // affiche 21
// vous pouvez effectuer des additions simples de date (similaire à mktime)
$d = DB_DataObject_Cast::date('01/12/2003');
$nextMonth = DB_DataObject_Cast::date($d->year,$d->month+1,1);
?> |
|
Le type SQL
Quelques types sont spécifiques à SQL ou sont spécifiques une la base de données, vous pouvez
dans ce cas, utiliser le type SQL pour mettre une chaîne particulière dans un traitement SQL.
Exemple 34-4. Utilisation particulière de SQL <?php
$person = DB_DataObject::factory('person');
$person->get(12);
// définition de l'anniversaire à NULL.
$person->birthday = DB_DataObject_Cast::sql('NULL');
// exécution d'un traitement SQL de transtypage (spécifique à PostGres)
$data = DB_DataObject_Cast::sql('cast("123123",datetime)');
// maintenant, on insert dans la base de données.
$person->insert();
?> |
|