【发布时间】:2014-10-31 08:55:44
【问题描述】:
使用 CakePHP 版本:2.3.1
我有一个用于授权的默认数据库,并基于此,为不同的客户端提供不同的数据库(数据库名称中包含客户端名称)。
我有许多模型,它们之间存在各种关系。我想使用一次调用来检索它们(递归检索所有关联的模型数据)。
场景:
数据库
default :
clients
[id, password, name]
[1, 'qwertycolemak', 'amazon']
[2, '5t4ck0verfl0w', 'ebay']
非默认数据库(下 2 个)
client_amazon
students[student_id, student_name]
course_students [student_id, course_id]
courses [course_id, course_name]
client_ebay
(same as client_amazon)
现在,假设我收到 [id:2, password:'5t4ck0verfl0w'] 的请求 我检查默认数据库(clients),检查密码,检索名称,在本例中为 ebay
现在,我要访问的数据库是'client_ebay'
我在 database.php 中有不同的配置对应于每个客户端。 我尝试使用
更改数据源$this->student->setDatasource('client_ebay')
$this->course->setDatasource('client_ebay')
$this->course_student->setDatasource('client_ebay')
这适用于对模型的单个 CRUD 调用(非递归)。
但是当我使用像
这样的调用(启用递归)时$this->student->findById(5)
数据源默认为“默认”,我收到一个错误:
模型 student 的表 students 未在数据源 default 中找到
如何通过控制器动态更改所有模型的默认数据源(不是一一)?
【问题讨论】:
-
请务必提及您的确切 CakePHP 版本! ps,有什么理由需要使用单独的数据库吗?
-
当你改变你的来源时,它是持久的吗?还是在第一次查询后重置为默认值?我会调查一下
-
添加了 cakePHP 版本 @ndm 我正在为不同的客户处理交易,所以我需要将它们分开
-
@AyoAkinyemi 更改源对于单个模型肯定是持久的 问题仅在 cakePHP 尝试递归检索数据库关系方面的关联数据时才会出现。然后,它会自动切换到默认值。
-
明白了!如何在您的 appModel 类中编写一个函数,将源设置为您想要的源,当您完成查询后,使用另一个函数将其重置为默认值。因为无论如何所有模型都会通过 appModel,所以该函数将始终确保任何模型都使用您设置的数据源。