我计划在CakePHP中开发一个Web应用程序,用于显示图形和卡中的信息。我选择了CakePHP,因为我们需要显示的信息非常结构化,因此模型方法可以更轻松地管理数据;我也有一些ASP.NET的MVC经验,我喜欢使用路由是多么简单。
所以,我的问题是,可以使用该应用程序的多个组织将拥有自己的数据库,其中包含与我们所需的模式不同的模式。我不能只在app.php文件中设置它们的字符串连接,因为它们的数据库与我的模型不匹配。
由于很多原因,组织数据源无法适应我的模型:表格名称不同,架构不同,我的实体字段在分隔的表格中,也许它们的信息在不同的数据库或不同的DBMS!
以这种方式,cakephp Model / Entity可以使用数据而不管源。你有什么建议怎么做吗? CakePHP可以选择使这成为可能吗?我应该将PHP与某种标记语言(如JSON或XML)一起使用吗?也许MySQL有一个实用工具可以将来自不同来源的数据转换成视图,我可以让CakePHP使用视图而不是表格吗? 如果您的答案尽可能详细。
如果无法创建界面,则可以使用其他选项: - 使用另一个可以轻松处理这个问题的框架,并具有我上面提到的功能。 - 让组织更改他们的数据库,使其与我的模型匹配(我不喜欢这个,可能他们不会这样做)。 - 在应用程序自己的数据库中传输数据。
其他信息: 图形显示的数据来自大学的学生。任何大学都有自己的数据库,使用db自己的结构和应用程序,这就是改变结构的原因。我只想让任何学校尽可能简单地配置他们自己的数据库。
编辑: 版本是CakePHP 3.2。 一个重要的约会是它不需要所有CRUD操作,只需要“阅读”。希望这使解决方案更容易。
答案 0 :(得分:1)
我认为你的“问题”不能正确回答,它没有足够的信息,也没有足够的细节。我想某些东西对于所有组织都会保持不变,但他们的数据和业务逻辑会有所不同。但我会试一试。
由于很多原因,组织数据源无法适应我的模型:表格名称不同,架构不同,我的实体字段在分隔的表格中,也许它们的信息在不同的数据库或不同的DBMS!
模型是一个完整的层,因此如果你有完全不同的表模式,那么你的业务逻辑(也就是该层的一部分)也会有所不同。简单地单独更改数据库连接对您没有帮助。数据也需要在视图中显示,视图也必须不同。
那么你可以尝试做什么,你的第二个图像显示的是,你实现了一个包含接口和基类的层。然后为使用这些接口和基类的每个组织创建一个Cake插件,并根据检查的任何条件(猜测域或子域)编写一些有条件地使用插件的代码。您必须以一种可以在API级别以相同方式访问任何组织的方式定义中间接口。
还有一个技术问题:你可以在模型层中define the connection of a table object。任何实体都知道它的起源但你不应该在实体中实现业务逻辑,也不应该通过实体改变连接。
编辑:版本是CakePHP 3.2。一个重要的约会是它不需要所有CRUD操作,只需要“阅读”。希望这使解决方案更容易。
如果确实如此,请使用the CRUD plugin(是的,您只能使用它的R部分)或编写一些代码,例如描述组织的类,并将用于创建表对象和视图苍蝇。
总的来说,这是一个非常有趣的问题,但恕我直言,可以在这里给出一个简单的答案或解决方案。我认为这需要一些讨论和分析才能找到最佳解决方案。如果您对咨询感兴趣,可以与我联系,查看我的个人资料。
答案 1 :(得分:1)
我发现了一种不编码任何界面的方法。实际上,它使用了DBMS和CakePHP中已包含的一些功能。
如果架构不适合模型,则可以创建视图以匹配模型中的de表名和列名。根据定义,视图作为一个表工作,因此CakePHP搜索相同的表名和列,DBMS使其工作。 我用MySQL中的视图进行了测试,它运行良好。您还可以组合来自不同表的数据。
如果用户使用其他DBMS,您只需更改app.php中的datasource,并在必要时制作视图
如果数据分布在不同的DBMS中,CakePHP允许您设置datasource for each table,只需将其添加到app.php并在表格中调用它(如果需要)。 / p>
最后,如果您只是需要"阅读"选项,创建一个对视图具有有限访问权限的用户,并且只能使用SELECT权限。
使用: CakePHP 3.2 SQL SERVER 2016 MySQL5.7