Drupal - Création d'une table dans une base secondaire

Posté le Jeudi 4 janvier 2018 - 18:24
Dernière mise à jour le Vendredi 26 janvier 2018 - 18:35

Voici comment créer une table dans une base de donnée autre que celle par défaut.

Code à mettre dans votre MODULE.install

Le principe : création d'un « HOOK_schema fake » et utilisation des HOOK_install et HOOK_uninstall pour créer / supprimer cette table en sélectionnant la bonne base.

Le code est pour drupal 8 mais il peut facilement être adapté pour drupal 7.

<?php

use \Drupal\Core\Database\Database;

function MODULE_schema_autre_db() {
  $schema['users'] = [
    'description' => 'Members informations',
    'fields' => [],
    'primary key' => ['id'],
  ];

  $schema['users']['fields']['id'] = [
    'description' => 'ID',
    'type' => 'serial',
    'not null' => TRUE,
    'unsigned' => TRUE,
  ];

  $schema['users']['fields']['uid'] = [
    'description' => 'Drupal ID',
    'type' => 'int',
    'not null' => TRUE,
    'unsigned' => TRUE,
  ];

  $schema['users']['fields']['mail'] = [
    'type' => 'varchar',
    'length' => 255,
  ];
  return $schema;
}


function MODULE_install() {
  Database::setActiveConnection('NOM_DB');
  $schema = MODULE_schema_autre_db();
  foreach ($schema as $name => $table) {
    Database::getConnection()->schema()->createTable($name, $table);
  }
  Database::setActiveConnection();
}

function MODULE_uninstall() {
  Database::setActiveConnection('NOM_DB');
  $schema = MODULE_schema_autre_db();
  foreach ($schema as $name => $table) {
    Database::getConnection()->schema()->dropTable($name);
  }
  Database::setActiveConnection();
}

 

 

Aller plus loin ?

 

Ajouter un commentaire

Ne sera pas publié

CAPTCHA Désolé, pour ça, mais c'est le seul moyen pour éviter le spam...