hook_schema non sta creando la tabella del database


12

La seguente funzione è contenuta in process_login.install come parte di un modulo personalizzato chiamato process_login. Il modulo funziona se ho creato manualmente la tabella del database, ma naturalmente vorrei che la tabella fosse creata automaticamente al momento dell'installazione.

La stessa funzione non genera un errore di schema durante l'installazione del modulo. Ma non crea nemmeno la tabella del database process_login_register nel database MySQL di Drupal 7.

Non ci sono altri errori che posso vedere o problemi segnalati da Site Report.

L'ho rimosso completamente e reinstallato numerose volte. Ho cercato ampiamente sul web e ho consultato due libri che ho sullo sviluppo di Drupal. Non riesco a vedere nulla di sbagliato in questa funzione (elencata di seguito).

NOTA: ho anche provato a definire 'id' come seriale ma ottengo lo stesso risultato (ovvero nessuna tabella creata).

Ho finito le idee. Qualcuno sa perché questa funzione non funziona?

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;
}

Quale versione di Drupal stai usando?
googletorp

3
Hai effettivamente disinstallato e reinstallato (non solo disabilitato e riattivato) il modulo da quando hai scritto la funzione?
Clive

Drupal 6 richiede di chiamare drupal_install_schema () in hook_install. In Drupal 7 si consiglia di non chiamarlo esplicitamente.
Shoaib Nawaz,

Risposte a sopra: Drupal 7. Sì. Sto usando Drupal 7, quindi non sto chiamando drupal_install_schema ().
user8109

1
@ user8109 Abilitare / disabilitare e installare / disinstallare sono due cose completamente diverse nei moduli. Abilitare un modulo (controllandolo nella pagina dei moduli e premendo 'Invia') abiliterà solo un modulo e invocherà hook_enable(). L'installazione di un modulo può essere eseguita solo dopo che è stato disinstallato (utilizzando la scheda di disinstallazione o devel / reinstall), dopo di che tutte le tabelle create dal modulo vengono eliminate. Quando installi quindi il modulo, hook_install()viene eseguito come previsto
Clive

Risposte:


22

Utilizzare ciò drush dre -y [module]che disabilita, disinstalla e quindi riattiva il modulo. La -ybandiera lo rende ancora più veloce, evitando di dover premere y e inserire tre volte.


16

Solo se si disinstalla un modulo e successivamente lo si reinstalla, hook_schema()vengono ricreate le tabelle del database che utilizza e con cui viene dichiarato .

Per disinstallare un modulo, è necessario:

  • Deseleziona la casella di controllo mostrata per il modulo

    immagine dello schermo

  • Fai clic su Salva configurazione

    immagine dello schermo

  • Fai clic sulla scheda: Disinstalla_

  • Fare clic sulla casella di controllo a sinistra del nome del modulo
  • Fai clic sul pulsante Disinstalla

    immagine dello schermo

  • Nella pagina successiva, confermare che si desidera disinstallare quel modulo facendo clic sul pulsante Disinstalla

    immagine dello schermo

In alternativa, se hai installato Drush, puoi usare i seguenti comandi.

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

Sostituisci $modulecon il nome breve del modulo, tra gli apici e senza l'estensione .module.

Quello che hai fatto è disabilitare il modulo e quindi riattivarlo. Anche se hai cancellato la directory contenente il modulo, per Drupal quello che hai fatto è solo disabilitare e quindi riattivarlo.


È possibile farlo usando drupal_install_schema e drupal_uninstall_schema .... drupal.org/node/876250
Hitesh
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.