Raccourcis : Contenu - rubriques - sous rubriques
EN FR

Manipuler les schémas

La classe jDbSchema permet de manipuler la structure d'une base de donnée. Elle possède ainsi des méthodes pour créer une table, récupérer la structure d'une table, ajouter/modifier/supprimer des colonnes etc. Elle s'accompagne des classes jDbtable et jDbColumn.

Vous pouvez récupérer un objet jDbSchema en appelant la méthode schema() d'un objet jDbConnection.

Voir la documentation de référence.

Exécuter un script SQL

Il est possible d'exécuter un script SQL contenant plusieurs requêtes SQL. Il suffit de passer le chemin du fichier du script à la méthode execSQLScript() d'un objet jDbTools, objet que l'on récupère via la méthode tools() d'un objet de connection.


  $conn = jDb::getConnection();
  $conn->tools()->execSQLScript('/chemin/vers/un/script.sql');

Pour tenir compte de la possibilité de préfixer les tables via la configuration d'un profil, il est fortement recommander de précéder tout les noms de tables par %%PREFIX%%, cela sera remplacé par le préfixe de table (si il y en a un), avant l'exécution du script.


UPDATE %%PREFIX%%product.....;
INSERT .....;

Méthodes pour Postgresql

La classe outils pour Postgresql contient des méthodes additionnels pour manipuler les champs de type tableau : decodeArrayValue() et encodeArrayValue(). Ils permettent de transformer les valeurs Postgresql de type tableau en tableau PHP et vice-versa.


    // On devrait avoir ici une connexion sur une base Postgresql
    $conn = jDb::getConnection();
    $pgTools = $conn->tools();

    // exemple de décodage
    $record = $conn->query('SELECT myarrayfield FROM mytable')->fetch();

    // Si la valeur de myarrayfield est '{{"meeting", "lunch"}, {"training", "presentation"}}'
    // phpValue aura comme valeur 'array(array("meeting", "lunch"), array("training", "presentation"))'
    $phpValue = $pgTools->decodeArrayValue($record->myarrayfield);

    // exemple d'encodage
    $phpValue = array("lunch", "presentation");
    $stmt = $conn->prepare("INSERT INTO mytable (myarrayfield) VALUES(:arr)");
    $stmt->execute(array( 'arr' => $pgTools->encodeArrayValue($phpValue, jDbPgsqlTools::ARRAY_VALUE_TYPE_TEXT)));
    // la valeur dans  myarrayfield sera '{"lunch","presentation"}'

Il faut indiquer le type des valeurs du tableau à encodeArrayValue, à l'aide de constantes :

  • jDbPgsqlTools::ARRAY_VALUE_TYPE_TEXT si le tableau contient des chaines
  • jDbPgsqlTools::ARRAY_VALUE_TYPE_INT si le tableau contient des nombres entiers
  • jDbPgsqlTools::ARRAY_VALUE_TYPE_FLOAT si le tableau contient des nombres flottants

Si les valeurs PHP ne sont pas du type indiqué, il y aura une conversion de type de la valeur.

jDbWidget

jDbWidget est une classe fournissant des méthodes utiles.


  $dbw = jDb::getDbWidget(); // au lieu de getConnection()

  $record = $dbw->fetchFirst("SELECT nom, prenom FROM user");
  
  $liste = $dbw->fetchAll("SELECT nom, prenom FROM user");

Pour le reste des méthodes, voyez la documentation de référence.