更改字段类型后,Drupal 7 无法正确保存数据
Drupal 7 does not save data correct after changing field type
我在客户方有一个 Drupal 7 应用程序。使用带有以下代码(在 *.install 文件中)的安装文件将数据库中的字段从 int 更改为 varchar(255) 后:
$spec = array(
'type' => 'varchar',
'length' => 255,
'not null' => TRUE,
'description' => t('The ID of the promotion, found in')
);
db_change_field('promotion', 'promotion_id', 'promotion_id', $spec);
数据库已更新,但是当我用 promotion_id 保存实体时,例如“8sf635”,它只会将 8 保存到数据库中。此外,当我用 'qsfd7aer' 保存实体时,它会在数据库中保存 0。
谁能告诉我这是怎么发生的?
检查实体的保存代码时,它看起来像:
entity_save(self::ENTITY_NAME_PROPOSITION_PROMOTION, $promotion);
并且在 $promotion 对象中 promotion_id 仍然是完整的字符串。
table 的架构似乎没有更新。
当 运行 drupal_get_schema('dpp_bab_promotion', true) 它显示该字段为 int 类型。
有几个可能的原因。首先是您没有清除缓存以使新模式生效。你说你清除了缓存,所以第二个更可能是你没有将更改添加到架构中,而只是更新了数据库。听起来架构仍然认为它是一个 int。
使用hook_schema_alter相对容易。 API 文档的评论部分有一些很好的资源:
https://api.drupal.org/api/drupal/modules%21system%21system.api.php/function/hook_schema_alter/7.x
我在客户方有一个 Drupal 7 应用程序。使用带有以下代码(在 *.install 文件中)的安装文件将数据库中的字段从 int 更改为 varchar(255) 后:
$spec = array(
'type' => 'varchar',
'length' => 255,
'not null' => TRUE,
'description' => t('The ID of the promotion, found in')
);
db_change_field('promotion', 'promotion_id', 'promotion_id', $spec);
数据库已更新,但是当我用 promotion_id 保存实体时,例如“8sf635”,它只会将 8 保存到数据库中。此外,当我用 'qsfd7aer' 保存实体时,它会在数据库中保存 0。
谁能告诉我这是怎么发生的?
检查实体的保存代码时,它看起来像:
entity_save(self::ENTITY_NAME_PROPOSITION_PROMOTION, $promotion);
并且在 $promotion 对象中 promotion_id 仍然是完整的字符串。
table 的架构似乎没有更新。 当 运行 drupal_get_schema('dpp_bab_promotion', true) 它显示该字段为 int 类型。
有几个可能的原因。首先是您没有清除缓存以使新模式生效。你说你清除了缓存,所以第二个更可能是你没有将更改添加到架构中,而只是更新了数据库。听起来架构仍然认为它是一个 int。
使用hook_schema_alter相对容易。 API 文档的评论部分有一些很好的资源: https://api.drupal.org/api/drupal/modules%21system%21system.api.php/function/hook_schema_alter/7.x