テーブルを作成するためのインストールファイルと共に、カスタムモジュールmyCustomModule
をdrupal 7
Webサイトに持っています。
テーブルに多くのコンテンツを既に保存していますが、以前のテーブルデータに影響を与えずに同じモジュールで新しいテーブルを作成する必要があります。
.INSTALL file
に新しいものを追加した場合、既存のデータコンテンツをテーブルから削除するモジュールをアンインストールしてインストールする必要があります。
既存のテーブルデータに影響を与えずに、既存のモジュールの新しいテーブルを作成する方法はありますか?.
以前のものに影響を与えずにモジュール構造を更新するにはどうすればよいですか。
[または私にとっての最後のオプションは、新しいモジュールを作成して別のテーブルを作成することですが、あまり多くのモジュールを作成したくありません]
助けてください、私はDrupal 7
のためにそれを行う必要があります
[〜#〜]編集[〜#〜]
私はこれに従いました link そしてコードを更新した後、以下を試し、キャッシュをクリアしました
/**
* Create new database table {new_table}.
*/
function my_module_update_7101() {
$schema['new_table'] = array(
'description' => 'Table for storing information about static media asset .',
'fields' => array(
'aid' => array(
'type' => 'serial',
'not null' => TRUE,
'description' => 'Primary Key: Unique aggregator static media asset ID.',
),
'asset_title' => array(
'type' => 'varchar',
'length' => 255,
'not null' => TRUE,
'default' => '',
'description' => 'Title of the static media asset title',
),
'asset_file_path' => array(
'type' => 'varchar',
'length' => 255,
'not null' => TRUE,
'default' => '',
'description' => 'CDN url path for asset.',
),
'status' => array(
'description' => 'status field for the static media assets',
'type' => 'int',
'length' => 1,
'not null' => TRUE,
'default' => 1,
),
),
'primary key' => array('aid'),
);
db_create_table('new_table', $schema['new_table']);
}
テーブルを更新していないようです
既存のテーブルのデータに影響を与えずに新しいテーブルを生成するアプローチ。
hook_schemaでテーブル構造を宣言します。後でこのモジュールをインストールする新しいユーザーがこのテーブルを取得する必要があるため、ここでhook_schemaにコーディングする必要があります。
/ ** * hook_schema()。 * /
function my_module_schema() {
$schema = array();
$schema['new_table'] = array(
'description' => 'Table for storing information about static media
asset .',
'fields' => array(
'aid' => array(
'type' => 'serial',
'not null' => TRUE,
'description' => 'Primary Key: Unique aggregator static media asset ID.',
),
'asset_title' => array(
'type' => 'varchar',
'length' => 255,
'not null' => TRUE,
'default' => '',
'description' => 'Title of the static media asset title',
),
'asset_file_path' => array(
'type' => 'varchar',
'length' => 255,
'not null' => TRUE,
'default' => '',
'description' => 'CDN url path for asset.',
),
'status' => array(
'description' => 'status field for the static media assets',
'type' => 'int',
'length' => 1,
'not null' => TRUE,
'default' => 1,
),
),
'primary key' => array('aid'),
);
return $schema;
}
モジュールを既にインストールしていて、新しいテーブルを作成したいユーザーは、以下のようにhook_update_n()と書くことができます。
/ ** * hook_update_n()。 * /
function my_module_update_7001() {
$schema = my_module_schema();
if(!db_table_exists('new_table'))
db_create_table('new_table', $schema['new_table']);
}
ここでは、すべてのスキーマを取得し、db_create_table()を使用して「new_table」を作成します。
これで問題が解決することを願っています。ありがとう。
hook_update_n() 、特にAdding a new tableの見出しを参照してください。
- 新しいモジュールをmymodule.installのmymodule_schema()に追加します。
- Mymodule_update_N()関数を作成して、スキーマAPI関数db_create_table()でmytable 2を作成します。
その後、データベースの更新を実行すると、新しいテーブルが作成されます(example.com/update.phpまたはdrush updb
)。