如何解决Drupal 8轨道计数器值
在我的Drupal网站上,我想管理一个保存特定实体时增加的计数器。我认为Drupal :: state是执行此操作的好方法,因为它存储在数据库中,这是一种state值。我的基本过程是:
function hook_entity_presave($entity) {
$value = \Drupal::state()->get('my_counter');
\Drupal::state()->set('my_counter',$value + 1);
}
但是,我发现有多个用户无法正常运行。实体的保存量大于计数器的增加量。当然,如果经常调用该函数,以至于在执行设置查询之前同时执行多个get查询,可能会发生这种情况,但是我希望这种情况不会很快发生(如果有一个简单的单个查询更新函数,我非常感兴趣不过!)。
问题似乎是Drupal :: state管理自己的本地值缓存。因此,get
可能不会返回实际值,而是返回一个缓存的值。
解决方案是:
function hook_entity_presave($entity) {
\Drupal::state()->resetCache();
$value = \Drupal::state()->get('my_counter');
\Drupal::state()->set('my_counter',$value + 1);
}
但是,这感觉效率很低,因为我可能每分钟重置缓存数百次,并且只需要清除特定的缓存值,而不是所有的缓存值即可。
所以我的问题是:是否有更好的方法来跟踪计数器值?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。