(Cake)PHP - 使用master中的数据更新子数据库

时间:2014-03-17 18:13:02

标签: php mysql sql cakephp

我正在使用CakePHP(最新版本)PHP框架开发一个应用程序,该框架将使用单一注册表单将CMS的几个实例联合起来。我正在使用MySql DB。问题是我无法修改CMS代码,我只能修改数据库数据,因为非常频繁的CMS更新将覆盖我的修改。

这个想法是系统将保留一个主用户表,如图所示,带有共享数据。主Users表和子Users表的表模型是相同的,除了一些CMS安装特定列(如简化图中所示)。

现在我正试图找出一种方法来反映我在master(INSERT和UPDATE)上对所有子DB进行的更改。因此,当我在CakePHP应用程序中进行更改时,我希望在所有子数据库实例中更新共享的字段。

Diagram (can't post images yet, sorry)

一种解决方案是为应用程序中的每个操作编写手动MySQL查询,但这看起来多余且烦人。

我怎样才能让我的应用重复我在每个孩子的MASTER上所做的所有查询。基本上,如果我在MASTER中更新条目ID 5的名称,那么在所有子数据库上运行相同的查询(它将在相同的ID下保存相同的条目,但是有一些额外的列)。

1 个答案:

答案 0 :(得分:0)

你可以使用CakePHP的模型触发器(beforeSave,afterSave ......)轻松地做到这一点。但保持所有这些东西同步将很快成为你最糟糕的噩梦。相反,我会做这样的事情:

  • Master.User有(id,name,password,specData1,specData2 ...)
  • Child1.User是一个mysql VIEW:CREATE VIEW User AS SELECT id AS id, name AS name.., specData1 AS specData FROM Master.User

是的,您可以创建跨数据库视图。对于CMS,Child1.User是一个表,所有操作CREATE / DELETE / UPDATE都由VIEW上的CMS透明地完成,并认为它是一个表。 (但Master.User得到更新)