【问题标题】:Separate public and edit-mode versions of database record单独的数据库记录的公共和编辑模式版本
【发布时间】:2011-03-08 10:09:59
【问题描述】:

如何最好地为数据库记录实现编辑模式?

记录(例如博客文章)需要在网站上显示公开版本,同时编辑模式版本正在编辑、预览、重新编辑等。

到目前为止,我想到了两个解决方案:

  1. 使用带有 ID 和模式的多列主键。
  2. 为每种模式使用单独的表格,并在它们之间进行复制。

我不可能是第一个需要这个功能的人。

这通常是怎么做的?有名字吗?

我使用的 CakePHP 不明确支持多列键,但我认为这对我的情况并不重要,因为在用户完成编辑后我实际上不会有多个具有相同 ID 的行。

【问题讨论】:

    标签: database-design cakephp primary-key multiple-columns


    【解决方案1】:

    就数据库而言,您不需要编辑模式。 尤其是在网络上——http 是一个不可靠的传输协议。

    如果您的用户界面允许编辑,那么您只需编辑并(我假设)单击一个按钮,然后在按钮“后面”的代码最终将更改的数据作为 UPDATE 语句发送回数据库。如果 UPDATE 语句格式正确,并且编辑者和应用程序有足够的权限,则 UPDATE 会成功,并且数据会发生变化。

    在 UPDDATE 之前读取该特定行的任何人都会看到旧版本;更新后阅读它的任何人都会看到新版本。 (忽略可能缓存的影响。)

    【讨论】:

    • 最后,这似乎是最简单的解决方案。我只是通过在预览页面上生成隐藏表单来在页面之间来回发布数据。
    【解决方案2】:

    听起来您正在寻找一个版本控制系统或创建帖子的能力,并且在得到管理员批准之前不会将其发布。我不认为这是 cakePHP 原生的,但你可以做的是,

    复制控制器中的编辑功能->复制->重命名,然后对编辑视图执行相同操作,然后创建一个名为edits的新数据库表。还为“保存”或“发布”创建一个下拉框

    然后,当按下提交按钮时,您可以通过查看 $this->data 中的数据来决定帖子将填充哪个数据库表。

    我认为这将是最简单的方法,因为复制编辑功能您不必担心将帖子的 id 发送到该功能,蛋糕会自动完成。所以你的帖子表和编辑表的 id 应该匹配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-13
      相关资源
      最近更新 更多