Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
$useDbConfig一次用于CakePHP v2.x.x的控制器中的所有使用模型_Php_Database_Cakephp_Model View Controller_Controller - Fatal编程技术网

$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%确定它会起作用。