web-dev-qa-db-fra.com

hook_schema ne crée pas de table de base de données

La fonction suivante est contenue dans process_login.install dans le cadre d'un module personnalisé appelé process_login. Le module fonctionne si j'ai créé manuellement la table de base de données, mais naturellement je voudrais que la table soit créée automatiquement lors de l'installation.

La fonction elle-même ne génère pas d'erreur de schéma lors de l'installation du module. Mais il ne crée pas non plus la table de base de données process_login_register dans la base de données Drupal 7 MySQL.

Je ne vois aucune autre erreur ni aucun problème signalé par Site Report.

Je l'ai complètement supprimé et réinstallé plusieurs fois. J'ai beaucoup cherché sur le Web et consulté deux livres que j'ai sur Drupal development. Je ne vois rien de mal avec cette fonction (listée ci-dessous).

REMARQUE: j'ai également essayé de définir `` id '' comme série mais j'obtiens le même résultat (c'est-à-dire qu'aucune table n'a été créée).

Je n'ai plus d'idées. Est-ce que quelqu'un sait pourquoi cette fonction ne fonctionne pas?

function process_login_schema(){
  $schema['process_login_register'] = array(
        'description' => 'Register a specific computer with the system.',
        'fields' => array(
                'id' => array(
                    'description' => 'Primary identifier.',
                    'type' => 'int',
                    'unsigned' => TRUE,
                    'size' => 'normal',
                    'not null' => TRUE,
                    'default' => 0,
                ),
                'ip' => array(
                        'description' => "The user's IP address at registration.",
                        'type' => 'varchar',
                        'length' => 32,
                        'not null' => TRUE,
                        'default' => '',
                ),
                'user_agent' => array(
                        'description' => "The user's browser user agent string at registration.",
                        'type' => 'varchar',
                        'length' => 255,
                        'not null' => TRUE,
                        'default' => '',
                ),
        ),
        'primary key' => array('id'),
  );
  return $schema;
}
12
user8109

Utilisation drush dre -y [module] qui désactive, désinstalle puis réactive le module. Le -y flag le rend encore plus rapide, évitant d'avoir à appuyer sur y et à entrer trois fois.

22
bloke_zero

Ce n'est que si vous désinstallez un module, puis le réinstallez, que les tables de base de données qu'il utilise et déclare avec hook_schema() sont recréées.

Pour désinstaller un module, vous devez:

  • Décochez la case affichée pour le module

    screenshot

  • Cliquez sur Enregistrer la configuration

    screenshot

  • Cliquez sur l'onglet: Uninstall_

  • Cliquez sur la case à cocher à gauche du nom du module
  • Cliquez sur le bouton Désinstaller

    screenshot

  • Sur la page suivante, confirmez que vous souhaitez désinstaller ce module en cliquant sur le bouton Désinstaller

    screenshot

Comme alternative, si vous avez installé Drush, vous pouvez utiliser les commandes suivantes.

drush pm-disable $module
drush pm-install $module
drush en $module

Remplacer $module avec le nom court du module, entre les sommets et sans l'extension .module.

Ce que vous avez fait est de désactiver le module, puis de le réactiver. Même si vous avez supprimé le répertoire contenant le module, pour Drupal ce que vous avez fait est simplement de le désactiver, puis de le réactiver.

16
kiamlaluno