【问题标题】:(Cake)PHP - Updating child databases with data from master(Cake)PHP - 使用来自主数据库的数据更新子数据库
【发布时间】:2014-04-23 02:46:04
【问题描述】:

我正在使用适用于 PHP 的 CakePHP(最新版本)框架开发一个应用程序,它将把 CMS 的多个安装与一个注册表单结合起来。我正在使用 MySql 数据库。问题是我无法修改 CMS 代码,我只能修改数据库数据,因为非常频繁的 CMS 更新会覆盖我的修改。

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

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

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

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

【问题讨论】:

  • 我没有完全理解试图解决的问题,所以我删除了我之前的评论。

标签: php mysql sql cakephp


【解决方案1】:

您可以使用 CakePHP 的模型触发器(beforeSave、afterSave...)轻松做到这一点,但保持所有内容同步很快就会成为您最糟糕的噩梦。相反,我会这样做:

  • Master.User 拥有(id、name、password、specData1、specData2...)
  • Child1.User 是 mysql 视图:CREATE VIEW User AS SELECT id AS id, name AS name.., specData1 AS specData FROM Master.User

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

【讨论】:

  • 我会研究一下视图的想法,看起来很酷。但问题是,它不应该同步 specData 列(specData 甚至不在 MASTER DB 中),specData 是从 CHILD DB 到 CHILD DB 内容不同的字段。对于每个孩子来说,这是一个非常重要的领域。我会调查一下,我希望这样的事情是可能的。
  • 所有 specData(来自所有 CHILD DB)都保存在 Master.User 中。原因是拆分 Child.User 表会导致更多问题。但请仔细阅读。对于Child1.User(specData) -> the VIEW is Master.User(specData1) AS specData 等等。通知1。对于 Child2.UserMaster.User.specData2 AS specData 单个子 specData 字段保存在 Master.User 中。
  • 嗯,那恐怕真的不行。安装数量是动态的,它可以每周更改。而且每次创建新安装时修改表结构和创建视图会有点危险。
猜你喜欢
  • 1970-01-01
  • 2017-01-14
  • 2012-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-01
  • 1970-01-01
  • 2017-04-28
相关资源
最近更新 更多