hook_schemaがデータベーステーブルを作成していません


12

次の関数は、process_loginというカスタムモジュールの一部として、process_login.installに含まれています。データベーステーブルを手動で作成した場合、モジュールは機能しますが、当然のことながら、インストール時にテーブルが自動的に作成されます。

関数自体は、モジュールのインストール時にスキーマエラーを生成しません。しかし、Drupal 7 MySQLデータベースにデータベーステーブルprocess_login_registerも作成しません。

私が見ることができる他のエラー、またはサイトレポートによって報告された問題はありません。

私はそれを完全に削除し、何度も再インストールしました。私はWebを広範囲に検索し、Drupal開発に関する2冊の本を調べました。この機能に問題はありません(以下に記載)。

注:私も 'id'をシリアルとして定義しようとしましたが、同じ結果が得られます(つまり、テーブルが作成されません)。

アイデアが足りなくなった。この関数が機能しない理由を誰かが知っていますか?

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

どのDrupalバージョンを使用していますか?
googletorp

3
関数を作成してから、モジュールを実際にアンインストールして再インストールしましたか(無効にして再度有効にしただけでなく)?
クライヴ

Drupal 6では、hook_installでdrupal_install_schema()を呼び出す必要があります。Drupal 7では、明示的に呼び出さないことをお勧めします。
Shoaib Nawaz

上記に対する回答:Drupal 7.はい。Drupal 7を使用しているため、drupal_install_schema()を呼び出していません。
user8109

1
@ user8109有効化/無効化とインストール/アンインストールは、モジュールでは2つのまったく異なるものです。モジュールを有効にすると(モジュールページでモジュールを確認して[送信]を押すと)、モジュールのみが有効になり、が呼び出されhook_enable()ます。モジュールのインストールは、(アンインストールタブまたはdevel / reinstallを使用して)アンインストールした後にのみ実行できます。その後、モジュールによって作成されたすべてのテーブルが削除されます。次にモジュールをインストールすると、hook_install()予想どおりに実行されます
Clive

回答:


22

drush dre -y [module]whichを使用して、モジュールを無効にし、アンインストールしてから、再度有効にします。-yフラグを使用すると、プレスに持って回避、それがさらに高速になり、Yと3回を入力してください。


16

モジュールをアンインストールしてから再インストールした場合にのみ、モジュールが使用および宣言するデータベーステーブルhook_schema()が再作成されます。

モジュールをアンインストールするには、以下を行う必要があります。

  • モジュールに表示されるチェックボックスをオフにします

    スクリーンショット

  • [ 設定保存]をクリックします

    スクリーンショット

  • :Uninstall_タブをクリックします

  • モジュール名の左側にあるチェックボックスをクリックします
  • [ アンインストール ]ボタンをクリックします

    スクリーンショット

  • 次のページで、[ アンインストール ]ボタンをクリックして、そのモジュールをアンインストールすることを確認します

    スクリーンショット

別の方法として、Drushをインストールしている場合は、次のコマンドを使用できます。

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

$moduleモジュールの短い名前で置き換え、頂点の間を.module拡張子なしで置き換えます。

あなたがやったことは、モジュールを無効にしてから再度有効にすることです。モジュールが含まれているディレクトリを削除した場合でも、Drupalの場合は、無効にしてから再度有効にするだけです。


drupal_install_schemaとdrupal_uninstall_schema ...を使用してこれを行うことは可能ですか?drupal.org/node/876250
Hitesh
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.