Drupal 5和Drupal 6没有这些字段中的一个(或两个)。该数据库不包含这些字段的原因可能是:
- 网站从 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 版本时从系统模块使用的更新代码编写的。我添加的部分是创建数据库字段的部分,因为数据库字段通常是在 Drupal 安装期间创建的。