Рейтинг:-3

Как получить имена таблиц из внешней БД в непубличной схеме

флаг cn

Я пишу модуль объекта конфигурации в drupal 9. Я хочу перечислить все таблицы из внешней базы данных (postgis) в схеме с именем gi. Переключение между базами данных не проблема. Я ищу способ получить только имя таблицы с именем gruenzuege, чтобы поместить это в форму разметки.

//форма куда сохранить таблицу

 $ форма ['таблицы'] = [
      '#тип' => 'набор полей',
      '#title' => $this->t('Таблицы'),
      '#collapsible' => TRUE, // Добавлено
      '#collapsed' => FALSE, // Добавлено
  ];

//Подключение к внешней базе данных

$postgis_database = массив(
      'база данных' => $drugis_postgis_connection->getdatabase(),
      'имя пользователя' => $drugis_postgis_connection->getusername(),
      'пароль' => $drugis_postgis_connection->getpassword(),
      'хост' => $drugis_postgis_connection->gethost(),
      'драйвер' => 'pgsql'
  );
Database::addConnectionInfo('postgis', 'по умолчанию', $postgis_database);
Database::setActiveConnection('по умолчанию', 'postgis');

//пример получения table:gruenzuege в drupal

    $results = Database::getConnection('default', 'postgis')->query('SELECT * FROM "gi"."gruenzuege"')->fetchAll();
дпм($результаты);

Я не понимаю, как запросить другую схему, чтобы получить только имена таблиц схемы gi? На самом деле это единственный стол. Спасибо за помощь

флаг cn
Добро пожаловать в ответы Drupal :) Это звучит как вопрос о SQL, а не о Drupal - если нет, не могли бы вы отредактировать и уточнить, что это за часть Drupal? Спасибо!
Steffen  avatar
флаг cn
Извините, надеюсь, теперь стало понятнее
Рейтинг:0
флаг cn

перечисление всех имен таблиц в массиве

$example_database = массив(
      'база данных' => ...,
      'имя пользователя' => ...,
      'пароль' => ...,
      'хост' => ...,
      'драйвер' => 'pgsql'
  );

Database::addConnectionInfo('example_key', 'по умолчанию', $example_database);
Database::setActiveConnection('по умолчанию', 'example_key');

$result=Database::getConnection('default', 'example_key')->query("SELECT table_name FROM information_schema.tables WHERE table_schema = '" . example_schema . "';");
  $tables = $result->fetchAll();

foreach ($ таблицы как $ таблица) {
      дпм($таблица->имя_таблицы);
      $tableNames[] = $table->table_name;
  }

База данных::setActiveConnection();

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.