如何在不清除缓存的情况下重新加载用户自定义字段
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()
- 这将清除两个字段数据和 字段缓存 - 而不是在字段上执行数据库操作,从而导致缓存数据无效。
我正在使用以下代码从数据库中删除。 当我转到用户页面时,该字段仍然填充。清除缓存后应用更改。
我在执行 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()
- 这将清除两个字段数据和 字段缓存 - 而不是在字段上执行数据库操作,从而导致缓存数据无效。