如何使用 cakephp 3 在不同数据库中的模型之间进行关联?

Posted

技术标签:

【中文标题】如何使用 cakephp 3 在不同数据库中的模型之间进行关联?【英文标题】:How to do Associations between models in different databases using cakephp 3? 【发布时间】:2015-08-31 15:01:37 【问题描述】:

上周我遇到了 cakephp 3.0 中与缩放相关的问题。

基本上,我为电子商务设计了一个应用程序,它将为多个客户提供服务。每个商店将在特定的子域(client1.application.com;client2.application.com 等)中销售其产品。所有商店将共享相同的应用程序源。

我希望有一个用于用户身份验证和其他公共资源的公共数据库,例如城市、国家/地区等的表格,以便所有用户都可以使用相同的登录信息访问使用此应用程序的所有电子商务商店。

每个客户端都有一个包含其特定资源的数据库,例如包含产品、销售额等的表格。

我发现了这篇有趣的文章http://mark-story.com/posts/view/using-cakephp-and-a-horizontally-sharded-database,并且我已经实现了该解决方案,以便 cakephp 可以知道识别子域并选择客户端的数据库作为默认连接。我更改了我想使用公共数据库的所有模型(用户等),以便它们始终连接到公共数据库。它正在工作。

但是,当涉及到 cakephp 中的关联时,我仍然有一个问题。例如:每个客户端在其特定数据库中都有一个管理员表,该表与 common_resources 数据库中的用户表相关联,因此当管理员登录时,应用程序会授予该子域的所有管理权限。

总而言之,这个问题涉及不同数据库中表之间的关联。 非常感谢!

【问题讨论】:

我认为这只是使用连接(hasOne,belongsTo)的关联的问题?如果是这样,也许 ***.com/questions/32033558/… 【参考方案1】:

通过在Table 类中明确定义defaultConnectionName(),您可以使用LazyLoad Plugin 定义存储在不同数据库中的实体之间的关联。

限制是你只能懒惰地加载它们。

另见documentation

【讨论】:

以上是关于如何使用 cakephp 3 在不同数据库中的模型之间进行关联?的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP:将数据保存到 3 个不同的模型

如何在 CakePHP 控制器中使用多个模型

模型中的函数在CakePhp 3中无法识别

如何拦截CakePHP 3中的检索字段?

如何在 cakephp 中为不同的模型设置不同的布局

CakePHP - 当某些字段为空时,防止模型数据保存在 saveMany 调用中