【问题标题】:How To Share Object Between multiple users如何在多个用户之间共享对象
【发布时间】:2021-03-26 17:10:28
【问题描述】:

我对一个奇怪的情况表示怀疑(不是很奇怪,但需要加以管理)。 我有一个 php 应用程序和一个客户要求进行特定的开发。 具体的开发包含调查和可编辑的表格,并分为几个部分。

section1 -> 调查和表格

section2 -> 调查和表格等...

每个部分的加载都很繁重,只有在(由其他用户)更改时才需要再次加载。

这是主要问题,我不知道如何处理这种情况。 (我想为每个部分创建一些哈希,当用户尝试打开会话时,比较这个哈希以知道是否相同..如果不再次加载该部分)。你有更好的主意吗?

【问题讨论】:

  • 添加修改数据的日志表或按修改的用户和日期在表中跟踪。
  • 添加日志表并获取该记录的最后2个条目,如果user_id在两行中相同,则不更改,否则更改

标签: php hash yii2 project multi-user


【解决方案1】:

您可以使用乐观锁机制来实现这一点。

yii2中有一个相当不错的解决方案,你可以去文档查看: https://www.yiiframework.com/doc/api/2.0/yii-db-baseactiverecord#optimisticLock()-detail

基本上 ActiveRecord 有一个内置的乐观锁功能。

乐观锁()

返回存储用于实现乐观锁的锁版本的列的名称。

乐观锁定允许多个用户访问同一记录进行编辑并避免潜在的冲突。如果用户试图在一些过期数据上保存记录(因为另一个用户已经修改了数据),将抛出 yii\db\StaleObjectException 异常,并跳过更新或删除。

只有 update() 和 delete() 支持乐观锁。

如果您使用 ActiveForm,您可以将 OptimisticLockBehavior 添加到您的模型类中以自动化该过程。

https://www.yiiframework.com/doc/api/2.0/yii-behaviors-optimisticlockbehavior

它是如何工作的:

在收集用户输入的 Web 表单中,添加一个隐藏字段,用于存储正在更新的记录的锁定版本。

要使用此行为,首先按照optimisticLock() 中列出的步骤启用乐观锁,从ActiveRecord 类的rules() 方法中删除保存锁版本的列名,然后添加以下代码:

use yii\behaviors\OptimisticLockBehavior;

public function behaviors()
{
    return [
        OptimisticLockBehavior::class,
    ];
}

强烈建议扩展活动记录,仅将行为附加到子类。在这种情况下,父类仍然是 usabel 用于内部使用。 (行为总是尝试检查 getBodyParams())

OptimisticLockBehavior 还提供了一个名为 upgrade() 的方法,该方法将模型的版本增加一,当您需要在连接的客户端之间将实体标记为过时并避免对其进行任何更改直到再次加载它时,该方法可能很有用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-22
    • 2015-10-10
    • 1970-01-01
    • 2011-01-17
    • 2013-06-15
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    相关资源
    最近更新 更多