我希望使用帮助中所述的命令migration / fresh --db = array来迁移测试数据库:
--db: Connection|array|string
the DB connection object or the application component ID of the DB connection to use
when applying migrations. Starting from version 2.0.3, this can also be a configuration array
for creating the object.
但是我不知道如何在命令行中指定一个数组。
我尝试了以下命令:
php yii migrate/fresh --db="dns=sqlite:@app/runtime/test.db"
但我明白了
Exception 'yii\base\UnknownPropertyException' with message 'Setting unknown property: yii\db\Connection::0'
看看console / Controller / runAction:
if (in_array($name, $options, true)) {
$default = $this->$name;
if (is_array($default)) {
$this->$name = preg_split('/\s*,\s*(?![^()]*\))/', $value);
} elseif ($default !== null) {
settype($value, gettype($default));
$this->$name = $value;
} else {
$this->$name = $value;
}
如果我希望能够从命令行传递数组,则好像$ this-> db应该被初始化为数组。
但是,即使我将其设置为数组,preg_split命令也会通过数字而不是字符串键来索引连接的配置数组,因此该数组无法创建db连接。
答案 0 :(得分:0)
您不能以这种方式从控制台进行配置。此描述来自$db
属性文档,该文档是有效的(MigrateController
将使用配置或Connection
实例处理数组),但是可以仅从PHP定义这些格式-从控制台只能传递字符串。
如果您确实需要通过PHP动态定义连接,则可以覆盖MigrateController::beforeAction()
并解析$db
中的字符串,并使用Connection
配置将其转换为数组-MigrateController
将能够处理它。