Преобразование объекта базы данных в строку URL базы данных
Я определил свое собственное подключение к базе данных в файле настроек Drupal следующим образом:
$databases['migrate']['default'] = array(
'driver' => 'mysql',
'database' => 'drupal',
'username' => 'root',
'password' => 'root',
'host' => 'localhost',
'prefix' => '',
);
Чтобы прочитать это в формате Объекта базы данных , вы можете запустить:
drush eval 'print_r(Database::getConnectionInfo("default", "migrate"));'
И теперь я хотел бы иметь строковое представление (аналогичное $db_url в Drupal 6), чтобы использовать его в некоторых командах drush в этой базе данных, например drush --db-url=${DB_URL} status
.
Поэтому я хотел бы преобразовать приведенный выше формат массива базы данных в формат строки URL базы данных (например, mysql://root:root@localhost/drupal
).
Есть ли есть какой-нибудь простой способ сделать это с помощью функции, PHP-кода или drush?
Дополнительная информация:
- Существует функция update_parse_db_url(), но она преобразует URL-адреса подключения к базе данных и возвращает массив, совместимый с D7.
3 answers
Использование Drush:
drush sa @site --with-db-url
Или, чтобы изолировать только URL-адрес базы данных:
drush sa @site --with-db-url --format=csv --fields=db-url --field-labels=0
Вот однострочный текст:
drush eval '$db = Database::getConnection("default", "migrate")->getConnectionOptions(); echo $db["driver"] . "://" . $db["username"] . ":" . $db["password"] . "@" . $db["host"] . ":" . $db["port"] . "/" . $db["database"];'
Для долгосрочного решения этого можно достичь, определив команду drush в вашем модуле (foo.drush.inc):
/**
* Implements hook_drush_command().
*/
function foo_drush_command() {
$items = array();
$items['get-db-uri'] = array(
'callback' => 'foo_drush_get_db_uri',
'arguments' => array(
'name' => array(
'description' => dt('Database name.'),
'required' => TRUE,
),
'key' => array(
'description' => dt('Key.'),
'required' => TRUEs,
),
),
'description' => dt('Returns database URI for a specified name and key.'),
'examples' => array(
'drush get-db-uri migrate default' => dt('Will return db uri in format: driver://user:pass@host:port/dbname'),
),
);
return $items;
}
/**
* Implements hook_drush_help().
*/
function foo_drush_help($section) {
switch ($section) {
case 'get-db-uri':
return dt("Returns database URI.");
}
}
/**
* Drush command (get-db-uri).
*
* Returns database URI for a specified name and key.
*
* @param string $name
* Database name.
* @param string $key
* Key.
*/
function foo_drush_get_db_uri($name, $key) {
$connection = Database::getConnection($key, $name);
$info = $connection->getConnectionOptions();
echo $info['driver'] . '://' . $info['username'] . ':' . $info['password'] . '@' . $info['host'] . ':' . $info['port'] . '/' . $info['database'];
}
Пример использования:
drush get-db-uri migrate default
В случае, если вы загрузили экземпляр drupal, drush и jq установили
drush status --fields="db-driver,db-hostname,db-port,db-username,db-password,db-name" --format="json" | jq '."db-driver"+"://"+."db-username"+":"+."db-password"+"@"+."db-hostname"+":"+."db-port"+"/"+."db-name"'