我将如何最好地为数据库记录实现编辑模式?
记录(例如博客文章)需要在网站上显示公开版本,同时编辑模式版本正在编辑、预览、重新编辑等。
到目前为止,我有两个解决方案:
- 使用带有 ID 和模式的多列主键。
- 为每种模式使用单独的表,并在它们之间进行复制。
我不能成为第一个需要这个功能的人。
这通常是怎么做的?它有名字吗?
我使用不明确支持多列键的 CakePHP,但我认为这对我的情况并不重要,因为在用户完成编辑后,我实际上不会有多个具有相同 ID 的行。
我将如何最好地为数据库记录实现编辑模式?
记录(例如博客文章)需要在网站上显示公开版本,同时编辑模式版本正在编辑、预览、重新编辑等。
到目前为止,我有两个解决方案:
我不能成为第一个需要这个功能的人。
这通常是怎么做的?它有名字吗?
我使用不明确支持多列键的 CakePHP,但我认为这对我的情况并不重要,因为在用户完成编辑后,我实际上不会有多个具有相同 ID 的行。
就数据库而言,您不需要编辑模式。特别是在网络上——http 是一个不可靠的传输协议。
如果您的用户界面允许编辑,那么您只需编辑并(我假设)单击一个按钮,然后在按钮“后面”的代码最终将更改的数据作为 UPDATE 语句发送回数据库。如果 UPDATE 语句格式正确,并且编辑器和应用程序有足够的权限,则 UPDATE 会成功,并且数据会发生变化。
在 UPDDATE 之前读取该特定行的任何人都会看到旧版本;更新后阅读它的任何人都会看到新版本。(忽略可能缓存的影响。)
听起来您正在寻找版本控制系统或创建帖子的能力,并且在获得管理员批准之前不会使其生效。我不认为这是 cakePHP 原生的,但你可以做的是,
复制控制器中的编辑功能->复制->重命名,然后对编辑视图执行相同操作,然后创建一个名为edits的新数据库表。还为“保存”或“发布”创建一个下拉框
然后,当按下提交按钮时,您可以通过查看 $this->data 中的数据来决定帖子将填充哪个数据库表。
我认为这将是最简单的方法,因为复制编辑功能您不必担心将帖子的 id 发送到该功能,蛋糕会自动完成。所以你的帖子表和编辑表的ID应该匹配。