0

我正计划在 CakePHP 中开发一个以图形和卡片显示信息的 Web 应用程序。我选择 CakePHP 是因为我们需要展示的信息非常结构化,所以模型的方式更容易管理数据;我也有一些来自 ASP.NET 的 MVC 经验,我喜欢使用路由是多么简单。

所以,我的问题是,可以使用该应用程序的多个组织将拥有自己的数据库,其架构与我们需要的架构不同。我不能只在 app.php 文件中设置他们的字符串连接,因为他们的数据库与我的模型不匹配。 基本上发生的事情是这样的

组织数据源不适合我的模型有很多原因:表的名称不同,架构不同,我的实体的字段在单独的表中,也许它们在不同的数据库中有信息,或者也在不同的 DBMS 中!

我想知道是否有办法制作一个实现这一目标的界面 在此处输入图像描述

以这样一种方式,cakephp 模型/实体可以使用数据,而不管来源如何。你对如何做到这一点有什么建议吗?CakePHP 是否可以选择使这成为可能?我应该将 PHP 与某种标记语言(如 JSON 或 XML)一起使用吗?也许 MySQL 有一个实用程序可以将来自不同来源的数据转换为视图,我可以让 CakePHP 使用视图而不是表?如果您有答案,请尽可能详细。

如果无法制作界面,则可以使用其他选项: - 使用另一个框架,可以更轻松地处理此问题并具有我上面提到的功能。- 让组织更改他们的数据库,使其与我的模型相匹配(我不喜欢这个,他们可能不会这样做)。- 在应用程序自己的数据库中传输数据。

附加信息:图表中显示的数据来自大学学生。任何大学都有自己的数据库,有自己的结构和使用数据库的应用程序,这就是为什么改变结构不是那么容易的原因。我只是想让任何学校尽可能轻松地配置自己的数据库。

编辑:版本是 CakePHP 3.2。一个重要的约定是它不需要所有的 CRUD 操作,只需要“读取”。希望这使解决方案更容易。

4

2 回答 2

1

我找到了一种无需编写任何接口的方法。事实上,它使用了一些已经包含在 DBMS 和 CakePHP 中的特性。

如果架构不适合模型,您可以创建视图以匹配模型中的表名和列名。根据定义,视图作为表工作,因此 CakePHP 搜索相同的表名和列,然后由 DBMS 完成工作。我在 MySQL 中使用视图进行了测试,效果很好。您还可以组合来自不同表的数据。

MySQL 视图

SQL Server 视图

如果用户使用另一个 DBMS,您只需更改 app.php 中的数据源,并在必要时创建视图

如果数据分布在不同的 DBMS 中,CakePHP 让您为每个表设置一个数据源,您只需将其添加到 app.php 并在需要时在表中调用它。

最后,如果您只需要“阅读”选项,请创建一个对视图具有有限访问权限且仅具有 SELECT 权限的用户。

使用:CakePHP 3.2 SQL SERVER 2016 MySQL5.7

于 2016-05-14T20:26:15.877 回答
1

我认为您的“问题”无法正确回答,它没有包含足够的信息,没有足够的细节。我想对于所有组织来说,有些东西会保持不变,但它们的数据和业务逻辑会有所不同。但我会试试看。

组织数据源不适合我的模型有很多原因:表的名称不同,架构不同,我的实体的字段在单独的表中,也许它们在不同的数据库中有信息,或者也在不同的 DBMS 中!

模型是一个完整的层,因此如果您有完全不同的表模式,那么作为该层一部分的业务逻辑也会有所不同。仅仅改变数据库连接对你没有帮助。数据也需要显示在视图中,并且视图也必须不同。

因此,您可以尝试做的以及您的第二张图片显示的是,您实现了一个包含接口和基类的层。然后为使用这些接口和基类的每个组织创建一个 Cake 插件,并编写一些代码,根据检查的任何标准(猜测域或子域)有条件地使用该插件。您必须以可以在 API 级别以相同方式访问任何组织的方式定义中间接口。

还有一个技术问题:您可以在模型层中定义表对象的连接。任何实体都知道它的来源,但您不应在实体内部实现业务逻辑,也不应通过实体更改连接。

编辑:版本是 CakePHP 3.2。一个重要的约定是它不需要所有的 CRUD 操作,只需要“读取”。希望这使解决方案更容易。

如果是这样,请使用CRUD 插件(是的,您只能使用其中的 R 部分)或编写一些代码,例如描述组织的类,并将用于动态创建表对象和视图。

总的来说,这是一个非常有趣的问题,但恕我直言,可以在这里给出一个简单的答案或解决方案。我认为这需要一些讨论和分析才能找到最佳解决方案。如果您有兴趣咨询,可以联系我,查看我的个人资料。

于 2016-05-12T20:36:05.067 回答