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

时间:2019-07-09 20:50:54

标签: php drupal drupal-7

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

在执行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);

我希望更改能够立即应用。

2 个答案:

答案 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>字段缓存-而不是对该字段执行数据库操作,从而导致无效的缓存数据。