$useDbConfig一次用于CakePHP v2.x.x的控制器中的所有使用模型
我目前正在为$useDbConfig一次用于CakePHP v2.x.x的控制器中的所有使用模型,php,database,cakephp,model-view-controller,controller,Php,Database,Cakephp,Model View Controller,Controller,我目前正在为Public$uses=array('Lead','User','Source',…)中定义的所有模型编写单独的行,以便在Controller中使用$useDbConfig $this->Lead->useDbConfig = $newDbConfig['name']; $this->User->useDbConfig = $newDbConfig['name']; $this->Source->useDbConfig = $newDbConfig
Public$uses=array('Lead','User','Source',…)
中定义的所有模型编写单独的行,以便在Controller中使用$useDbConfig
$this->Lead->useDbConfig = $newDbConfig['name'];
$this->User->useDbConfig = $newDbConfig['name'];
$this->Source->useDbConfig = $newDbConfig['name'];
但是我想立即为所有$uses
->useDbConfig
设置$useDbConfig
。
使用foreach
循环似乎无法实现。有什么办法可以实现吗?
Cake v2.5.7假设您始终希望您的潜在客户、用户等模型使用备用数据库配置,我的方法是为这些模型创建一个新的AppModel,该模型将更改UsedDBConfig并扩展AppModel:-
class AltAppModel extends AppModel {
public $useDbConfig = 'your-alt-db-config';
}
然后,对于需要替代配置的模型,扩展新的AppModel
class Lead extends AltAppModel {
}
显然,使用比AltAppModel更好的命名约定更适合您的项目。:-)
更新
不确定这是否有效,但根据您的评论,您可以尝试以下方式:-
class AppModel extends Model {
public function changeDbConfig($config) {
$this->useDbConfig = $config;
// Update the belongs to associates
foreach ($this->belongsTo as &$Model) {
$Model->useDbConfig = $config;
}
// Then repeat for hasOne and hasMany...
}
}
然后,当需要动态更改$useDbConfig
时,调用:-
$this->Lead->changeDbConfig('your-alt-db-config');
我不是100%确定这会起作用,尽管Cake可能不允许您以这种方式更新这些。动态更改
$useDbConfig
对我来说有点奇怪。如果您要根据应用程序设置进行更改,最好在引导中进行更改。是的,在控制器中,您可以在uses
数组中进行迭代,例如:
public $uses = ['Lead', 'User', 'Source'];
foreach ($this->uses as $model) {
$this->{$model}->setDataSource($newDbConfig['name']);
}
实际上,我想动态地将值赋给$useDbConfig。使用您的解决方案,我可以考虑创建一个函数,将值设置为类$useDbConfig变量,但它不适用于相关表。不确定这是否有效,但在动态设置$useDbConfig时,您可以尝试运行关联并设置每个模型的$useDbConfig。可能不起作用,但值得一试。你能解释一下关联会有什么帮助吗?任何代码示例。@Anupal我已经用建议更新了我的答案。但不是100%确定它会起作用。