hook_schema veritabanı tablosu oluşturmuyor


12

Aşağıdaki işlev, process_login.install içinde process_login adı verilen özel bir modülün bir parçası olarak bulunur. Modül, veritabanı tablosunu manuel olarak oluşturduysam çalışır, ancak doğal olarak tablonun kurulum sırasında otomatik olarak oluşturulmasını isterim.

İşlev, modülün yüklenmesi sırasında bir şema hatası oluşturmaz. Ancak Drupal 7 MySQL veritabanında process_login_register veritabanı tablosunu da oluşturmaz.

Görebildiğim başka hatalar veya Site Raporu tarafından bildirilen sorunlar yok.

Tamamen çıkardım ve defalarca yeniden kurdum. İnternette kapsamlı bir araştırma yaptım ve Drupal gelişimi hakkında iki kitaba baktım. Bu işlevle ilgili yanlış bir şey göremiyorum (aşağıda listelenmiştir).

NOT: Ben de seri olarak 'id' tanımlamayı denedim ama aynı sonucu elde (yani hiçbir tablo oluşturuldu).

Fikirlerim bitti. Bu işlevin neden çalışmadığını bilen var mı?

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

Hangi Drupal sürümünü kullanıyorsunuz?
googletorp

3
Fonksiyonu yazdıktan sonra modülü gerçekten kaldırıp yeniden kurdunuz (sadece devre dışı bırakılıp yeniden etkinleştirilmiyor)?
Clive

Drupal 6, hook_install'da drupal_install_schema () öğesini çağırmayı gerektirir. Drupal 7'de açıkça çağırmamanız önerilir.
Shoaib Nawaz

Yukarıdaki yanıtlar: Drupal 7. Evet. Drupal 7 kullanıyorum yani drupal_install_schema () çağırmıyorum.
user8109

1
@ user8109 Modüllerde etkinleştirmek / devre dışı bırakmak ve kurmak / kaldırmak iki farklı şeydir. Bir modülü etkinleştirmek (modüller sayfasında kontrol etmek ve 'Gönder'e basmak) sadece bir modülü etkinleştirir ve çağırır hook_enable(). Bir modülün kurulması ancak kaldırıldıktan sonra (kaldırma sekmesi veya geliştirme / yeniden yükleme kullanılarak) yapılabilir, daha sonra modül tarafından oluşturulan tüm tablolar silinir. Daha sonra modülü hook_install()
Clive

Yanıtlar:


22

drush dre -y [module]Modülü devre dışı bırakan, kaldıran ve ardından yeniden etkinleştirenleri kullanın . -yBayrak basın zorunda kaçınarak, hatta daha hızlı hale getirir y ve üç kez girin.


16

Yalnızca bir modülü kaldırır ve daha sonra yeniden yüklerseniz, kullandığı ve bildirdiği veritabanı tabloları hook_schema()yeniden oluşturulur.

Bir modülü kaldırmak için yapmanız gerekenler:

  • Modül için gösterilen onay kutusunun işaretini kaldırın

    ekran görüntüsü

  • Yapılandırmayı kaydet'i tıklayın

    ekran görüntüsü

  • Kaldır: sekmesine tıklayın

  • Modül adının solundaki onay kutusunu tıklayın
  • Tıklayın Kaldır düğmesi

    ekran görüntüsü

  • Sonraki sayfada, Kaldır düğmesine tıklayarak bu modülü kaldırmak istediğinizi onaylayın.

    ekran görüntüsü

Alternatif olarak, Drush'ı yüklediyseniz, aşağıdaki komutları kullanabilirsiniz.

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

Değiştir $moduleapekslerinde arasında, ve modül uzantısı olmadan, modülün kısa adıyla.

Yaptığınız şey modülü devre dışı bırakmak ve ardından yeniden etkinleştirmektir. Modülü içeren dizini silseniz bile, Drupal için yaptığınız şey devre dışı bırakmak ve ardından yeniden etkinleştirmektir.


Mümkün mü bu kullanarak drupal_install_schema ve drupal_uninstall_schema .... yapmak drupal.org/node/876250
Hitesh
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.