Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 批准编辑_Mysql_Database_Laravel_Database Design - Fatal编程技术网

Mysql 批准编辑

Mysql 批准编辑,mysql,database,laravel,database-design,Mysql,Database,Laravel,Database Design,我想知道审查需要管理员批准的用户编辑的最佳解决方案 目前,我有一个Users表,其中包含以下字段 用户名 密码 创建于 更新地址 我有一个带有以下字段的关系表user\u profile 用户id 名字 姓氏 街头 拉链 陈述 关于我 我还有一个表pending\u user\u profile用于审批 用户id 名字 姓氏 街头 拉链 陈述 关于我 目前,我正在检查pending_user_profile表中是否有用户id,以在应用程序的编辑屏幕内显示pending数据 我这样检查

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

目前,我有一个
Users
表,其中包含以下字段

  • 用户名
  • 密码
  • 创建于
  • 更新地址
我有一个带有以下字段的关系表
user\u profile

  • 用户id
  • 名字
  • 姓氏
  • 街头
  • 拉链
  • 陈述
  • 关于我
我还有一个表
pending\u user\u profile
用于审批

  • 用户id
  • 名字
  • 姓氏
  • 街头
  • 拉链
  • 陈述
  • 关于我
目前,我正在检查pending_user_profile表中是否有用户id,以在应用程序的编辑屏幕内显示pending数据

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

还显示了管理员的挂起数据。(基本上,我只是得到了挂起的用户配置文件中的所有信息。因此管理员知道用户编辑了哪些信息

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

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

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

任何帮助都将不胜感激


提前感谢!

我不会为此创建另一个表。只需将
版本
状态
添加到您的
用户配置文件
表中。如果用户编辑它,请创建一个新记录,版本更高,状态为
挂起
。然后您可以进行比较。如果管理员接受它,请将状态设置为
活动并删除或保留上一个

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

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
}

我不会为此创建另一个表。只需将
版本
状态
添加到您的
用户配置文件
表中。如果用户编辑它,请创建一个新记录,版本更高,状态为
待定
。您可以进行比较。如果管理员接受它,请将状态设置为
活动
,然后删除或保留前一个

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

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
}

如果您不介意添加新表:

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

  • 如果您不介意添加新表:

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

  • 我建议使用我找到的DB结构,并在此链接中提出了一个问题:

    我在这个系统上得到了很好的反馈,保存了多个表的更改,每个表都有不同的结构。
    我还应该告诉大家,我使用的是Zend Frameword。因此,对于需要管理员批准的用户,我不使用例如Product model。我使用另一个名为ChangeApprovalNeedProduct model的母亲来扩展Product model,但在对其调用save方法时,我阻止系统将更改保存到Product表,而是收集更改将数据保存在键值表中,并将其保存在其他名为Changes table的位置。

    我建议使用我在该链接中找到并询问的DB结构:

    我在这个系统上得到了很好的反馈,保存了多个表的更改,每个表都有不同的结构。 我还应该告诉大家,我使用的是Zend Frameword。因此,对于需要管理员批准的用户,我不使用例如Product model。我使用另一个名为ChangeApprovalNeedProduct model的母亲来扩展Product model,但在对其调用save方法时,我阻止系统将更改保存到Product表,而是收集更改将数据保存在键值表中,并将其保存在另一个名为“更改表”的位置