SALT > Manuel > Tutoriel > Base de données >
D'autres types de requêtes sont disponibles.

Création de table

Le framework peut créer la table correspondant à un objet déclaré avec la classe DatabaseHelper
Il est conseillé de vérifier avant qu'on a bien indiqué les types SQL lors de la déclaration de l'objet, sinon ils seront déduits par le framework en fonction du type.

createTablesFromObjects(DBHelper $db, array $objects) On peut également déterminer si une ou plusieurs tables n'existent pas avec missingTables()

Voici un exemple illustrant l'utilisation de ces deux méthodes : <?php
$db 
DBHelper::getInstance(DB_DATABASE_TEST);

$missingObjects DatabaseHelper::missingTables($db, array('City''Person')); // va exécuter la requete :
// SELECT t0.table_name as table_name
// FROM information_schema.tables t0
// WHERE t0.table_name IN ('city', 'person') AND t0.table_schema = database()

DatabaseHelper::createTablesFromObjects($db$missingObjects); // si les tables sont manquantes, va exécuter :
// CREATE TABLE city (
//        id INT(11) PRIMARY KEY AUTO_INCREMENT NOT NULL,
//        city_name VARCHAR(50) NOT NULL,
//        country VARCHAR(50) NOT NULL,
//        date_mise_a_jour DATETIME NOT NULL
// ) ENGINE=InnoDB
// puis
// CREATE TABLE person (
//        id INT(11) PRIMARY KEY AUTO_INCREMENT NOT NULL,
//        person_name VARCHAR(50) NOT NULL,
//        city INT(11) NOT NULL
// ) ENGINE=InnoDB
Le code de déclaration des classes City et Person est visible ici

Lors de la création des tables, il est également possible d'initialiser les tables en créant automatiquement certains objets.
Pour cela il faut implémenter la méthode initAfterCreateTable dans l'objet et renvoyer la liste des objets à créer.

Ajout d'index

Il est possible d'ajouter des index lors de la création de la table en exécutant des requêtes en dur dans initAfterCreateTable.

Par exemple : <?php
public function initAfterCreateTable(DBHelper $db) {
    
$db->execSQL('ALTER TABLE ['.__CLASS__.'] ADD INDEX `city_country` (`city_name` ASC, `country` ASC)');
    ...
    return 
NULL;
}