2015-10-02 51 views
1

我想知道审查需要由管理员批准的用户编辑的最佳解决方案。批准修改

目前我有一个Users表与以下字段。

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

我有一个关系表user_profile具有以下字段

  • USER_ID
  • 名字
  • 邮编
  • 国家
  • About_me

我也有一个表pending_user_profile的批准

  • USER_ID
  • Firstn AME
  • 邮编
  • 国家
  • About_me

目前我正在检查是否有在pending_user_profile表为user_id显示编辑里面的未决数据屏幕上的应用程序。

林检查它是这样的:PendingUser::where('user_id', $this->id)->exists();

的未决数据也被示出为管理员。 (基本上我只是得到pending_user_profile内一切,让管理员知道哪些用户已编辑有信息

即时得到的数据是这样的:。PendingUser::all();

第一个问题: 我不知道该怎么当我有大量的用户时,它会起作用,所以我试图找到一个更好的解决方案,或者想知道现在使用的解决方案可能完全正确,我不应该担心它。检查待处理区域是否有好的方法?

第二个问题stion: 当存储未决的领域我不知道如何处理它。 我应该比较所有领域之前提交他们的未决领域? 这种方式即时只是存储更改的字段。这个选项的缺点是我必须从2个独立的表中获取数据。

任何帮助将不胜感激。

在此先感谢!

回答

0

我不会为此创建另一个表。只需在user_profile表中添加versionstatus即可。如果用户对其进行编辑,请创建一个更高版本的新记录,状态为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 
} 
0

如果你不介意添加新表:

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

我建议DB结构我已经找到,并在这个环节问了一个问题有关:in this link

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