CakePHP shell:随时随地切换 CAKE_ENV

CakePHP shell: Switch CAKE_ENV on the Go

我这里有个小问题。我是 cakephp 的新手,现在必须开发一个 cakephp shell 脚本来将数据保存到它的数据库中。问题是,我在默认环境下工作,需要将数据保存到另一个环境中。我正在使用此代码切换环境:

ConnectionManager::alias($env, 'default');

看起来不错,因为我在尝试获取数据库时得到了正确的输出。

$this->out($datasource->config()['database']);

然后加载我的模型:

$model = $this->Model;

但它是从 default 环境加载模型数据。我的方法错了吗?或者,还有另一种方法可以使用 cakephp 随时随地切换环境?

这应该可以正常工作,快速测试表明确实如此。您可能需要显示更多上下文,但我猜您正在加载模型(您显示的不是 loadingaccessing) 在创建连接别名之前,因此模型将使用它在实例化时收到的原始连接。

因此,请确保您之后 加载 模型,或者分别在加载模型之前创建别名(即调用 TableRegistry::get() 时) ),或在适用的情况下即时更改特定型号的连接:

$connection = ConnectionManager::get($env);
$model->setConnection($connection); // use connection($connection) in CakePHP < 3.4