我正在使用以下代码从数据库中删除。 当我转到用户页面时,该字段仍然填充。清除缓存后,将应用更改。
在执行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);
我希望更改能够立即应用。
答案 0 :(得分:0)
您必须在save()方法之后使用此命令:
drupal_flush_all_caches();
这是手册的链接: https://www.drupal.org/docs/7/administering-drupal-7-site/clearing-or-rebuilding-drupals-cache
答案 1 :(得分:0)
您只需要为此特定用户实体重置缓存数据。最直接的方法是使用DrupalEntityControllerInterface ::resetCache()
方法:
entity_get_controller('user')->resetCache(array($uid));
根据字段的管理方式以及是否“附加”字段,您可能还需要清除字段缓存数据:
cache_clear_all('field:user:' . $uid, 'cache_field', TRUE);
对于这些任务而言,其他功能实在太繁琐,而且绝对不是您想要的:
cache_clear_all()
使所有cache_*
表(或其子集)中的数据失效。 drupal_flush_all_caches()
与上面的功能相同,但除此之外,它还会重建菜单缓存和主题注册表,实体和节点类型信息数组,还清除css和js缓存,最后调用钩子,以便其他模块的缓存数据也可以清除。 注意:如果您的目标只是在删除字段数据后清除字段缓存数据,请考虑使用功能field_purge_data()
-该功能将清除字段数据和< / em>字段缓存-而不是对该字段执行数据库操作,从而导致无效的缓存数据。