检测字段更改 - cakePHP

时间:2013-02-07 12:11:54

标签: php mysql cakephp

我想要什么

我想查看表中哪些字段已更改,并将该名称保存到编辑列下的数据库中。

我有什么

目前,并不多。只是标准的cakePHP烘焙编辑视图和控制器。我以前做过,但不是用cakePHP做的。我所做的是检索记录,如果它与用户输入的内容不同,请保存在与该行对应的edit列中编辑的列的名称。

我的问题

有人能告诉我如何将用户输入与数据库中的内容进行比较吗?

1 个答案:

答案 0 :(得分:3)

"Logable" Behavior之类的行为已经这样做,并分别存储信息。 我建议你也这样做。 “变化”不一定需要放在同一个表中。但是,如果您觉得他们这样做,您可以创建自己的“修改”Logable行为,只创建“diff”并将其存储到您选择的同一记录中的字段中。

PS:您可能还想查看RevisionBehavior。 它还包含一些diff算法。 然后是WhoDidIt behavior,它存储最后修改记录的用户。但是在同一张桌子上。因此,结合上述内容应该可以解决问题。

无论哪种方式:

  • 在模型本身上使用回调(beforeSave / afterSave)或将(清理)用作行为
  • 计算差异
  • 将差异存储在一个单独的表中,或者在一个额外的表字段中存储。

实际上在这里写一些能完成这项工作的东西非常简单。 这里的自愿练习是将其写成更“通用”。也许您希望将来再次为其他模型重用相同的功能?复制和粘贴将是非常糟糕的风格。这里的目标是创建一些可以轻松重用的通用代码。如果您的初始代码有效,请尝试将其重写为一个通用的ChangesBehavior,您可以将其附加到您喜欢的模型中。您可以使用链接的示例或查看其他行为,以了解如何执行此操作。

此外,您可以在github / plugins.cakephp中发布您的行为,并再次向社区提供一些信息。也许其他人也觉得它很有用。