web-dev-qa-db-ja.com

スキーマがインストールされない

SchemaAPIを使用していますが、テーブルを作成できません。これは、ほとんどの場合サンプルモジュールからコピーされるschema_test.installの内容です。

<?php
function schema_test_install() {
  drupal_install_schema('schema_test');
}
function schema_test_schema() {
  $schema['schema_test_one'] = array(
    'description' => 'Stores example person entries for demonstration purposes.',
    'fields' => array(
      'pid'  => array(
        'type' => 'serial',
        'not null' => TRUE,
        'description' => 'Primary Key: Unique person ID.',
      ),
      'uid' => array(
        'type' => 'int',
        'not null' => TRUE,
        'default' => 0,
        'description' => "Creator user's {users}.uid",
      ),
      'name' => array(
        'type' => 'varchar',
        'length' => 255,
        'not null' => TRUE,
        'default' => '',
        'description' => 'Name of the person.',
      ),
      'surname' => array(
        'type' => 'varchar',
        'length' => 255,
        'not null' => TRUE,
        'default' => '',
        'description' => 'Surname of the person.',
      ),
      'age' => array(
        'type' => 'int',
        'not null' => TRUE,
        'default' => 0,
        'size' => 'tiny',
        'description' => 'The age of the person in years.',
      )
    ),
    'primary key' => array('pid'),
    'indexes' => array(
      'name'    => array('name'),
      'surname' => array('surname'),
      'age'     => array('age'),
    ),
  );
  return $schema;
}
/* vim: set ts=8 sw=2 tw=79 cc=80 ft=php:*/

スキーマモジュールも有効にしており、このスキーマが[不足]の下に表示されます。したがって、認識されますが、モジュールが有効になっているときはインストールされません。ここで何が欠けていますか?

3
Nils Riedemann

Drupal 7でdrupal_install_schemaを呼び出す必要がないという事実により、私は引っ掛かりました。また、hook_installを使用してテーブルでアクションを実行する必要があります設定するのではなく、.

Drupal 7はスキーマを認識し、モジュールがアクティブ化されると自動的にインストールします。したがって、Drupal 7は手動で呼び出しているため、スキーマを2回インストールしようとしています。

これ は、少し説明するのに役立つかもしれません。

また、データベースをチェックインして、テーブルがすでに存在するかどうかを確認してください。正しくインストールされていない場合、Drupalはテーブルを見て、実際には正しくないのに正しいと考えている可能性があります。

8
Chapabu

Drupal 7で、スキーマによって定義されたテーブルを作成/再作成するには、モジュールを手動でアンインストールする必要があることがわかりました。

これを行うには、まずモジュールを無効にしてから、[モジュール]ページの[アンインストール]タブをクリックします。次に、モジュールをアンインストールして再度有効にします。これにより、インストールフックが実行されます。

3
Goldentoa11