批准编辑

时间:2015-10-02 08:53:01

标签: mysql database laravel database-design

我想了解审核需要经过管理员批准的用户编辑的最佳解决方案。

目前我的Users表包含以下字段。

  • 用户名
  • 密码
  • Created_at
  • 的updated_at

我有一个关系表user_profile,其中包含以下字段

  • USER_ID
  • 姓氏
  • 邮编
  • 国家
  • About_me

我还有一个表pending_user_profile用于批准

  • USER_ID
  • 姓氏
  • 邮编
  • 国家
  • About_me

目前我正在检查pending_user_profile表中是否有user_id,以在应用程序的编辑屏幕中显示待处理数据。

我这样检查:PendingUser::where('user_id', $this->id)->exists();

还会显示管理员的待处理数据。 (基本上我只是将所有内容都放在pending_user_profile中。所以管理员知道用户在那里编辑了哪些信息。

我得到的数据如下:PendingUser::all();

第一个问题: 当我有大量用户时,我不确定这会怎样。因此,我试图找到一个更好的解决方案,或者想知道我现在使用的解决方案可能完全没问题,我根本不应该担心它。我检查待定字段的方法是一种好方法吗?

第二个问题: 存储待处理字段时,我不知道如何处理它。 我应该在将所有字段提交到待处理字段之前比较所有字段吗? 这样我只是存储更改的字段。这个选项的缺点是我必须从2个单独的表中获取数据。

任何帮助将不胜感激。

提前致谢!

3 个答案:

答案 0 :(得分:0)

我不会为此创建另一个表。只需在version表格中添加statususer_profile即可。如果用户对其进行编辑,请创建具有更高版本且状态为pending的新记录。你可以比较一下。如果管理员接受它,请将状态设置为active并删除或保留上一个。

然后您可以为用户设置两者的关系:

public function pendingProfile() {
    return $this->hasOne('UserProfile')
        ->where('status', 'pending')
        ->orderBy('version', 'desc');
}

public function currentProfile() {
    return $this->hasOne('UserProfile')->where('status', 'active');

    // Here you can also take the latest version if you delete any other active, 
    // or add the where and order as above to get the latest
}

答案 1 :(得分:0)

如果您不介意添加新表:

  1. 您可以将新值存储到额外的表中,并且可以在主表中添加一个列,该列指定该行是否具有待处理的编辑。当管理员批准更改时,将从额外表中提取新值并将其更新到主表中。
  2. 您可以立即更新主表,但将旧数据保留在额外表中。这样,如果管理员批准,您只需删除旧数据,如果拒绝,则返回旧数据。 请记住更新状态列

答案 2 :(得分:0)

我建议我找到的数据库结构,并在此链接中询问了一个问题:in this link

我在这个系统上获得了相当不错的反馈,同时保存了多个表格更改,每个表格都有不同的结构。 而且我应该告诉我,我正在使用Zend Frameword.so用户,他们的更改需要管理员批准我不使用例如产品型号.i使用另一个名为ChangeApprovalNeededProduct模型的母亲扩展产品模型但是当他们调用保存方法时我会阻止系统从保存更改到Product表而不是我在键值表中收集更改的数据,并将它们保存在名为Changes table的其他位置。