Yii2:如何将数据库控制台迁移参数设置为数组

时间:2019-05-27 08:31:32

标签: yii2 console migration

我希望使用帮助中所述的命令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连接。

1 个答案:

答案 0 :(得分:0)

您不能以这种方式从控制台进行配置。此描述来自$db属性文档,该文档是有效的(MigrateController将使用配置或Connection实例处理数组),但是可以仅从PHP定义这些格式-从控制台只能传递字符串。

如果您确实需要通过PHP动态定义连接,则可以覆盖MigrateController::beforeAction()并解析$db中的字符串,并使用Connection配置将其转换为数组-MigrateController将能够处理它。