如何在不清除缓存的情况下重新加载用户自定义字段

how to reload user custom fields without clearing cache

我正在使用以下代码从数据库中删除。 当我转到用户页面时,该字段仍然填充。清除缓存后应用更改。

我在执行 sql 查询后尝试了 user_save() 和 user_load()。

$num_deleted = db_delete('field_data_field_teams')
->condition('field_teams_tid', $mytid)
->condition('entity_id', $user_fields->uid)
->condition('entity_type', 'user')
->execute();
$account = user_load($uid);
user_save($account);

我希望立即应用更改。

您必须在 save() 方法之后使用此命令:

drupal_flush_all_caches();

这里是 link 手册: https://www.drupal.org/docs/7/administering-drupal-7-site/clearing-or-rebuilding-drupals-cache

您只需重置此特定用户实体的缓存数据。最直接的方法是使用 DrupalEntityControllerInterface ::resetCache() 方法:

entity_get_controller('user')->resetCache(array($uid));

根据您的字段的管理方式以及是否 "attached",您可能还需要清除字段缓存数据:

cache_clear_all('field:user:' . $uid, 'cache_field', TRUE);

其他功能对于这些任务来说太繁重了,绝对不是您想要的:

  • cache_clear_all() 使所有(或部分)cache_* 表中的数据过期。
  • drupal_flush_all_caches()和上面的功能一样,但是除了重建菜单缓存和主题注册表,实体和节点类型信息数组外,它还清除了css和js缓存,最后它调用钩子,以便其他模块的缓存数据也可以被清除。

注意 :如果您的目标只是在字段数据删除后清除字段缓存数据,请考虑使用函数 field_purge_data() - 这将清除两个字段数据 字段缓存 - 而不是在字段上执行数据库操作,从而导致缓存数据无效。