Message d'avertissement

The subscription service is currently unavailable. Please try again later.

[Résolu] fichier .install : aucune table créée !

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

je suis en train de créer un module. J'ai voulu créer une table automatiquement à partir du fichier .install. Celui-ci doit être automatiquement exécuté quand le module est chargé.

Et là, aucune table n'est créée !

Je ne vois pas d'où cela peut venir. J'ai testé avec un db_query aussi mais sans succès.

Merci d'avance

Voici mon fichier.install :

<?php
function datehisto_schema() {
  $schema['dateshistos'] = array(
  'description' => t('stock les dates historiques tirées de wikipedia'),
  'fields' => array(
    'id' => array(
      'description' => t('id auto-incrémenté'),
      'type' => 'serial',
      'not null' => TRUE,
    ),
    'jour' => array(
      'description' => t('jour de la date distorique'),
      'type' => 'int',
      'not null' => TRUE,
    ),
    'mois' => array(
      'description' => t('mois de la date distorique'),
      'type' => 'int',
      'not null' => TRUE,
    ),
    'annee' => array(
      'description' => t('année de la date distorique'),
      'type' => 'int',
      'not null' => TRUE,
    ),
    'description' => array(
      'description' => t('description de la date historique'),
      'type' => 'varchar',
      'length' => '255',
      'not null' => TRUE,
    ),
  ),
  'primary key' => array('id'),
);
  return $schema;
}

function datehisto_install() {
  // Création de mes tables
  drupal_install_schema('datehisto');
   
   /db_query("CREATE TABLE {dateshistos} (
              id integer NOT NULL AUTO_INCREMENT ,
               jour int(2) NOT NULL ,
             mois int(2) NOT NULL ,
             annee int(4) NOT NULL ,
                description VARCHAR(255) NOT NULL ,
                PRIMARY KEY (id)
               );"
           );
/
}

function datehisto_uninstall() {
  // Suppression de mes tables.
  drupal_uninstall_schema('datehisto');
}

function token_update_1() {
  $ret = array();
  $ret[] = update_sql("UPDATE {system} SET weight = 10 WHERE name = 'token'");
  return $ret;
}

Forum : 
Version de Drupal : 

Bonjour,
les descriptions ne peuvent être données qu'au niveau de la table et non des champs.
Il faut donc les supprimer:

<?php

function datehisto_schema() {
 
$schema['dateshistos'] = array(
     
'description' => t('stock les dates historiques tirées de wikipedia'),
     
'fields' => array(
             
'id' => array(
                 
'type' => 'serial',
                 
'not null' => TRUE,
            ),
             
'jour' => array(
                 
'type' => 'int',
                 
'not null' => TRUE,
            ),
             
'mois' => array(
                 
'type' => 'int',
                 
'not null' => TRUE,
            ),
             
'annee' => array(
                 
'type' => 'int',
                 
'not null' => TRUE,
            ),
             
'description' => array(
                 
'type' => 'varchar',
                 
'length' => '255',
                 
'not null' => TRUE,
            ),
      ),
     
'primary key' => array('id'),
  );
  return
$schema;
}

function datehisto_install() {
 
// Création de mes tables
 
drupal_install_schema('datehisto');
}

function datehisto_uninstall() {
 
// Suppression de mes tables.
 
drupal_uninstall_schema('datehisto');
}

function token_update_1() {
 
$ret = array();
 
$ret[] = update_sql("UPDATE {system} SET weight = 10 WHERE name = 'token'");
  return
$ret;
}

?>

Cordialement, Aya

Bonjour comment ce nomme ton module ?
Il faut que ton module ce nomme comme le début de tes fonctions.
si ton module s’appelle "test" il faudra écrire "test_install".
le fichier doit aussi avoir le même nom "test.install".
Je suppose que tu le sais déjà mais vérifie au cas où (problème de s ou autre).
Sinon moi le schema fonctionne vu que je l'ai tester.
Cordialement, Aya

Dès lors que vous activez pour la première fois votre module, celui-ci est considéré comme installé par Drupal. Drupal n'appellera donc pas votre hook_install() lors des prochaines activations et desactivation du module. Pour forcer un module a etre resinstallé, utilisez la fonction "Reinstall" du module Devel.