Saat Anda membuat tabel baru di hook_schema()
, haruskah tabel itu ditambahkan hook_update_N()
juga? Atau ada beberapa trik, atau sesuatu yang saya lewatkan, agar pembaruan databae secara otomatis menambahkan tabel?
Dokumentasi hook_update_N () tidak menjelaskan apa-apa tentang memperkenalkan tabel baru, sedangkan dokumentasihook_schema()
mengatakan:
Tabel yang dideklarasikan oleh kait ini akan secara otomatis dibuat ketika modul pertama kali diaktifkan , dan dihapus ketika modul dihapus instalasinya.
(Sorot adalah milikku)
Dan jika demikian, cara terbaik menghindari duplikasi definisi skema untuk tabel baru di hook_update_N () dan hook_schema (). Cukup mengacu pada skema sebagai berikut:
function hook_update_N(&$sandbox) {
$schema = hook_schema();
$name = "foo";
$table = $schema["foo"];
db_create_table($name, $table);
}
Tampaknya berfungsi, tetapi saat mengganti tabel lagi, akan gagal jika pengguna menjalankan pembaruan dan menjalankan dua atau lebih hook_update_N (). Setelah semua: hook_update_N pertama kemudian akan menginstal database yang benar dan hook_update_M kedua () akan mencoba untuk menambah / mengubah / mengubah kolom yang sudah terbaru.
Bagaimana Anda menangani ini?
Jawaban:
Jadi tinggal copy paste dari drupal.org. Anda juga perlu menambahkan definisi skema ke hook_schema.
sumber
mymodule_update_7101 () bagus, bersama dengan kait ini jika kita menambahkan hook_install () untuk menjalankan instalasi modul yang sama dan bukannya definisi hook_schema () juga berfungsi untuk saya.
sumber
hook_install()
tidak boleh memanggil implementasi hook_update_N () apa pun, karena fakta sederhana:hook_install()
adalah untuk menginstal modul untuk pertama kalinya, yang berarti tidak ada tabel untuk diperbarui. Selain itu, kode Anda tidak akan berfungsi untuk pembaruan yang memerlukan batch untuk dijalankan.