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 随时随地切换环境?
这应该可以正常工作,快速测试表明确实如此。您可能需要显示更多上下文,但我猜您正在加载模型(您显示的不是 loading 但 accessing) 在创建连接别名之前,因此模型将使用它在实例化时收到的原始连接。
因此,请确保您之后 加载 模型,或者分别在加载模型之前创建别名(即调用 TableRegistry::get()
时) ),或在适用的情况下即时更改特定型号的连接:
$connection = ConnectionManager::get($env);
$model->setConnection($connection); // use connection($connection) in CakePHP < 3.4
我这里有个小问题。我是 cakephp 的新手,现在必须开发一个 cakephp shell 脚本来将数据保存到它的数据库中。问题是,我在默认环境下工作,需要将数据保存到另一个环境中。我正在使用此代码切换环境:
ConnectionManager::alias($env, 'default');
看起来不错,因为我在尝试获取数据库时得到了正确的输出。
$this->out($datasource->config()['database']);
然后加载我的模型:
$model = $this->Model;
但它是从 default
环境加载模型数据。我的方法错了吗?或者,还有另一种方法可以使用 cakephp 随时随地切换环境?
这应该可以正常工作,快速测试表明确实如此。您可能需要显示更多上下文,但我猜您正在加载模型(您显示的不是 loading 但 accessing) 在创建连接别名之前,因此模型将使用它在实例化时收到的原始连接。
因此,请确保您之后 加载 模型,或者分别在加载模型之前创建别名(即调用 TableRegistry::get()
时) ),或在适用的情况下即时更改特定型号的连接:
$connection = ConnectionManager::get($env);
$model->setConnection($connection); // use connection($connection) in CakePHP < 3.4