Yii2: Как установить параметр переноса консоли db как массив - PullRequest
0 голосов
/ 27 мая 2019

Я хочу перенести мою тестовую базу данных с помощью команды migrate / 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.

, но я не знаю, как указать массив в командеline.

Я пробовал следующую команду:

  php yii migrate/fresh --db="dns=sqlite:@app/runtime/test.db"

, но я получаю

Exception 'yii\base\UnknownPropertyException' with message 'Setting unknown property: yii\db\Connection::0'

Просмотр консоли / 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 индексирует массив configuracion для соединения по номеру, а не по строковому ключу, поэтому этот массив не может создать соединение БД.

1 Ответ

0 голосов
/ 28 мая 2019

Вы не можете настроить его с консоли таким образом. Это описание взято из документации по свойствам $db, которая действительна (MigrateController будет обрабатывать массив с конфигурацией или экземпляром Connection), но эти форматы можно определить только из PHP - из консоли вы может передать только строку.

Если вам действительно нужно определить соединение динамически из PHP, вы можете переопределить MigrateController::beforeAction() и проанализировать строку в $db и преобразовать ее в массив с конфигурацией Connection - MigrateController сможет справиться с этим.

...