Drupal 5とDrupal 6には、これらのフィールドが 1 つ (または 2 つ) ありません。そのデータベースにこれらのフィールドが含まれていない理由は次のとおりです。
- サイトが Drupal 5 / Drupal 6 から Drupal 7 に更新され、更新がうまくいかなかった
- データベースが破損しました
- モジュールがデータベースからフィールドを削除しました
- これらのフィールドは手動で削除されました
あなたができることは、不足しているフィールドをデータベースに追加し、最初に既存のフィールドを更新しようとすることです (サイトが以前の Drupal バージョンから更新され、更新が成功しなかった場合)。
次のコードが役立ちます。
// Drop indexes.
@db_drop_index('url_alias', 'src_language_pid');
@db_drop_unique_key('url_alias', 'dst_language_pid');
// Rename the fields, and increase their length to 255 characters.
@db_change_field('url_alias', 'src', 'source', array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''));
@db_change_field('url_alias', 'dst', 'alias', array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''));
if (db_field_exists('url_alias', 'language')) {
$spec = array(
'description' => "The language this alias is for; if 'und', the alias will be used for unknown languages. Each Drupal path can have an alias for each supported language.",
'type' => 'varchar',
'length' => 12,
'not null' => TRUE,
'default' => '',
);
db_change_field('url_alias', 'language', 'language', $spec);
db_update('url_alias')
->fields(array('language' => LANGUAGE_NONE))
->condition('language', '')
->execute();
}
else {
$spec = array(
'description' => "The language this alias is for; if 'und', the alias will be used for unknown languages. Each Drupal path can have an alias for each supported language.",
'type' => 'varchar',
'length' => 12,
'not null' => TRUE,
'default' => '',
);
db_add_field('url_alias', 'language', $spec);
}
// Add indexes back.
@db_add_index('url_alias', 'source_language_pid', array('source', 'language', 'pid'));
@db_add_index('url_alias', 'alias_language_pid', array('alias', 'language', 'pid'));
このコードが欠落しているフィールドを取得しない場合、それは更新の失敗ではありません。この場合、次のコードを使用できます。これは、サイトが Drupal 7 より前の Drupal バージョンから更新されていないことが確実な場合に使用する必要があります。
// Drop indexes.
@db_drop_index('url_alias', 'src_language_pid');
@db_drop_unique_key('url_alias', 'dst_language_pid');
$spec = array(
'description' => "The language this alias is for; if 'und', the alias will be used for unknown languages. Each Drupal path can have an alias for each supported language.",
'type' => 'varchar',
'length' => 12,
'not null' => TRUE,
'default' => '',
);
db_add_field('url_alias', 'language', $spec);
$spec = array(
'type' => 'varchar',
'length' => 255,
'not null' => TRUE,
'default' => ''
);
db_add_field('url_alias', 'source', $spec);
// Add indexes back.
@db_add_index('url_alias', 'source_language_pid', array('source', 'language', 'pid'));
@db_add_index('url_alias', 'alias_language_pid', array('alias', 'language', 'pid'));
このコードは、Drupal の以前のバージョンを更新するときに System モジュールから使用される更新コードに基づいて記述されています。データベース フィールドは通常、Drupal のインストール時に作成されるため、追加した部分はデータベース フィールドを作成する部分です。