hook_schema tidak membuat tabel database

12

Fungsi berikut terkandung dalam process_login.install sebagai bagian dari modul khusus yang disebut process_login. Modul ini berfungsi jika saya secara manual membuat tabel database, tetapi secara alami saya ingin tabel dibuat secara otomatis saat instalasi.

Fungsi itu sendiri tidak menghasilkan kesalahan skema saat memasang modul. Tetapi tidak juga membuat tabel database process_login_register di database MySQL Drupal 7.

Tidak ada kesalahan lain yang bisa saya lihat, atau masalah yang dilaporkan oleh Laporan Situs.

Saya telah menghapusnya sepenuhnya dan menginstal ulang beberapa kali. Saya telah mencari web secara ekstensif, dan berkonsultasi dengan dua buku yang saya miliki tentang pengembangan Drupal. Saya tidak dapat melihat ada yang salah dengan fungsi ini (tercantum di bawah).

CATATAN: Saya juga mencoba mendefinisikan 'id' sebagai serial tetapi mendapatkan hasil yang sama (yaitu tidak ada tabel yang dibuat).

Saya sudah kehabisan ide. Adakah yang tahu mengapa fungsi ini tidak berfungsi?

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;
}
pengguna8109
sumber
Versi Drupal apa yang Anda gunakan?
googletorp
3
Sudahkah Anda benar-benar menghapus dan menginstal kembali (tidak hanya dinonaktifkan dan diaktifkan kembali) modul sejak menulis fungsi?
Clive
Drupal 6 harus memanggil drupal_install_schema () di hook_install. Dalam Drupal 7 disarankan untuk tidak menyebutnya secara eksplisit.
Shoaib Nawaz
Jawaban di atas: Drupal 7. Ya. Saya menggunakan Drupal 7 jadi tidak memanggil drupal_install_schema ().
user8109
1
@ user8109 Mengaktifkan / menonaktifkan dan menginstal / mencopot adalah dua hal yang sangat berbeda dalam modul. Mengaktifkan modul (memeriksa di halaman modul dan menekan 'Kirim') hanya akan mengaktifkan modul, dan memanggil hook_enable(). Menginstal modul hanya dapat dilakukan setelah itu dihapus (menggunakan tab uninstall atau devel / instal ulang), setelah itu semua tabel yang dibuat oleh modul dihapus. Ketika Anda menginstal modul, hook_install()jalankan seperti yang Anda harapkan
Clive

Jawaban:

22

Gunakan drush dre -y [module]yang menonaktifkan, mencopot pemasangan lalu mengaktifkan kembali modul. The -ybendera membuatnya lebih cepat, menghindari Anda harus tekan y dan masukkan tiga kali.

bloke_zero
sumber
16

Hanya jika Anda menghapus modul, dan kemudian menginstalnya kembali, tabel database yang digunakan dan dideklarasikan dengannya hook_schema()dibuat ulang.

Untuk menghapus modul, Anda harus:

  • Hapus centang pada kotak yang ditunjukkan untuk modul

    tangkapan layar

  • Klik pada Simpan konfigurasi

    tangkapan layar

  • Klik pada tab: Uninstall_

  • Klik pada kotak centang di sebelah kiri nama modul
  • Klik pada tombol Uninstall

    tangkapan layar

  • Pada halaman berikutnya, konfirmasikan Anda ingin menghapus modul itu dengan mengklik tombol Uninstall

    tangkapan layar

Sebagai alternatif, jika Anda telah menginstal Drush, Anda dapat menggunakan perintah berikut.

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

Ganti $moduledengan nama pendek modul, di antara apeks, dan tanpa ekstensi .module.

Apa yang telah Anda lakukan adalah menonaktifkan modul, dan kemudian mengaktifkannya kembali. Bahkan jika Anda menghapus direktori yang berisi modul, untuk Drupal apa yang telah Anda lakukan hanya menonaktifkan, dan kemudian mengaktifkannya kembali.

kiamlaluno
sumber
Apakah mungkin untuk melakukan ini menggunakan drupal_install_schema dan drupal_uninstall_schema .... drupal.org/node/876250
Hitesh