IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend_Db PHP Discussion :

Création de Zend_Db_Create


Sujet :

Zend_Db PHP

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 118
    Par défaut Création de Zend_Db_Create
    Bonjour à tous,

    Je suis en cours de création d'une application modulaire (à titre perso) qui n'aurait pas seule vocation à être un CMS, mais aussi intranet ou site internet.

    En cours de réalisation du noyau, je suis cette semaine sur la partie installation de l'application et en particulier la création de la base de données ou altération pour les futures versions.

    Désirant que l'application puisse être installé au choix sur l'une ou l'autre des systèmes de base de données (MySql, SQLServer, Oracle SE ...) , j'ai repris le concept de DRUPAL ou les requêtes SQL (Create ou Alter Table) sont écrites dans le code dans un pseudo langage.

    Personnellement mon pseudo langage est du XML hiérarchisé reprend la syntaxe du SQL2 selon une DTD (en cours d'évolution) ci-joint :

    J'ai rapidement fait une première série de méthode permettant de retranscrire mes schémas (format XML) en requête SQL, et cela fonctionne, mais non satisfait.

    Ma question est :
    Ne serait-il pas intéressant de créer des Classes au même titre que Zend_Db_Select (générant des SELECT),
    - Zend_Db_Create pour la génération de requête CREATE
    - Zend_Db_Alter pour la génération de requête ALTER

    Cela me permettrait également de ne pas utiliser que le format XML en guise de stockage de paramétrage.

    Quand pensez-vous ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!ELEMENT configdata (schemas) >
    <!ELEMENT schemas (schema+)>
    <!ELEMENT schema (drop | create)?>
     
    <!ELEMENT drop EMPTY>
    <!ATTLIST drop  name CDATA #REQUIRED
                temporary (true) #IMPLIED 
                if_exists (true) #IMPLIED >
     
    <!ELEMENT create (columns?, contraints? , options?)>
    <!ATTLIST create
                name CDATA #REQUIRED
                temporary (true) #IMPLIED 
                if_not_exists (true) #IMPLIED > 
     
    <!ELEMENT columns (column+)>
     
    <!ELEMENT column (type, (primarykey | key)?, auto_increment?, nullable?, default?, comment?)>
    <!ATTLIST column
            name CDATA #REQUIRED>
     
    <!ELEMENT nullable EMPTY >
    <!ATTLIST nullable
            value (NULL | NOT_NULL) #REQUIRED>
     
    <!ELEMENT default EMPTY >
    <!ATTLIST default 
                value CDATA #REQUIRED>
     
    <!ELEMENT primarykey EMPTY>
     
    <!ELEMENT auto_increment EMPTY >
     
    <!ELEMENT key EMPTY >
     
    <!ELEMENT comment EMPTY >
    <!ATTLIST comment 
                value CDATA #REQUIRED>
     
    <!ELEMENT type ( char | varchar | tinyint | numeric | decimal | integer | smallint | float | real | double )?>
     
    <!ELEMENT char EMPTY >
    <!ATTLIST char 
                length CDATA  #REQUIRED>
     
    <!ELEMENT varchar EMPTY >
    <!ATTLIST varchar 
                length CDATA  #REQUIRED>
     
    <!ELEMENT numeric EMPTY >
    <!ATTLIST numeric
                length CDATA #REQUIRED
                decimals CDATA #REQUIRED
                unsigned (true) #IMPLIED
                zerofill (true) #IMPLIED
                >
     
    <!ELEMENT tinyint EMPTY >
    <!ATTLIST tinyint
                length CDATA #IMPLIED
                unsigned (true) #IMPLIED
                zerofill (true) #IMPLIED
                >
     
    <!ELEMENT decimal EMPTY >
    <!ATTLIST decimal
                length CDATA #REQUIRED
                decimals CDATA #REQUIRED
                unsigned (true) #IMPLIED
                zerofill (true) #IMPLIED
                >
     
    <!ELEMENT integer EMPTY >
    <!ATTLIST integer
                length CDATA #IMPLIED
                unsigned (true) #IMPLIED
                zerofill (true) #IMPLIED
                >
     
    <!ELEMENT smallint EMPTY >
    <!ATTLIST smallint
                length CDATA #IMPLIED
                decimals CDATA #IMPLIED
                unsigned (true) #IMPLIED
                zerofill (true) #IMPLIED
                >
     
    <!ELEMENT float EMPTY >
    <!ATTLIST float
                length CDATA #IMPLIED
                decimals CDATA #IMPLIED
                unsigned (true) #IMPLIED
                zerofill (true) #IMPLIED
                >
     
     
    <!ELEMENT real EMPTY >
    <!ATTLIST real
                length CDATA #IMPLIED
                decimals CDATA #IMPLIED
                unsigned (true) #IMPLIED
                zerofill (true) #IMPLIED
                >
     
     
    <!ELEMENT double EMPTY >
    <!ATTLIST double
                length CDATA #IMPLIED
                decimals CDATA #IMPLIED
                unsigned (true) #IMPLIED
                zerofill (true) #IMPLIED
                >            
     
    <!ELEMENT contraints EMPTY >
     
    <!ELEMENT options (engine , autoincrement)? >
    <!ELEMENT engine EMPTY >
    <!ATTLIST engine value (BDB|HEAP|ISAM|InnoDB|MERGE|MRG_MYISAM|MYISAM) #REQUIRED >
     
    <!ELEMENT autoincrement  EMPTY >
    <!ATTLIST autoincrement 
                value CDATA #IMPLIED>

  2. #2
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Bonjour,

    Ce serait certainement intéressant, mais c'est il me semble complexe à mettre en oeuvre et à maintenir (du moins pour moi).

    La classe Zend_Db_Select permet de créer dynamiquement des requêtes SQL, mais ce n'est pas son rôle de s'affranchir du SGBD. C'est l'adapteur de connexion qui s'en occupe. Un exemple, pour limiter le nombre de résultats de la requête, on peut utiliser la méthode limit() d'un objet Zend_Db_Select. Mais cet objet ne sait pas directement comment cela doit se traduire dans l'écriture du code SQL. L'objet Select utilise alors l'adaptateur pour construire la requête (méthode limit() des Zend_Db_Adapter...) ce qui se traduira par l'utilisation de LIMIT sur MySQL, de ROWNUM avec Oracle, etc...

    Il ne suffirait donc pas de créer des classes Zend_Db_Create et Zend_Db_Alter mais aussi d'étendre les classes Zend_Db_Adapter pour y gérer les différences entre chaque SGBD. Et si on considère par exemple les différences de types de données que l'on peut rencontrer, la tâche peut s'avérer difficile.

    Je pense que c'est pour ces raisons que ces classes n'existent pas encore dans le ZF...

  3. #3
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    De plus, si tu veux offrir la possibilité de choisir une db, il faut abstraire le code SQL, soit par PDO soit par un ORM.

    ZF fait le choix de Doctrine en version 2.0, je pense que tu devrais te pencher sur ce côté du devrais une solution à ton souci.

Discussions similaires

  1. Classe pour la création d'un graphe xy
    Par Bob dans le forum MFC
    Réponses: 24
    Dernier message: 03/12/2009, 17h20
  2. Création dynamique de TImages
    Par Dric dans le forum C++Builder
    Réponses: 10
    Dernier message: 08/07/2002, 12h36
  3. [Kylix] Création d'un fichier lien
    Par DrQ dans le forum EDI
    Réponses: 2
    Dernier message: 14/05/2002, 21h30
  4. Création image BMP
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 16h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo