【问题标题】:how to reload user custom fields without clearing cache如何在不清除缓存的情况下重新加载用户自定义字段
【发布时间】:2019-07-09 20:50:54
【问题描述】:

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

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

我希望立即应用更改。

【问题讨论】:

    标签: php drupal drupal-7


    【解决方案1】:

    您只需要重置此特定用户实体的缓存数据。实现这一目标的最直接方法是使用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() - 这将清除字段数据 字段缓存——而不是对字段执行数据库操作,从而导致缓存数据无效。

    【讨论】:

      【解决方案2】:

      你必须在 save() 方法之后使用这个命令:

      drupal_flush_all_caches();
      

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

      【讨论】:

      • 实际上正如 Eric 所说,我需要在不清除缓存的情况下执行此操作,我不希望页面需要很长时间才能重新加载
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-22
      • 2011-04-13
      • 2011-01-19
      • 2020-10-21
      • 2011-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多