Как сделать внешнюю базу данных доступной для Views?

8

Здесь и в других местах много обсуждается использование внешних баз данных в Drupal. Из этого я понял:

  • Лучший способ работы с данными в таблице базы данных - использовать модуль Views. Я установил его и начал использовать, и обнаружил, что он отлично подходит для работы с таблицей, которую я добавил в базу данных сайта.
  • Самый простой способ заставить Views работать с таблицей, которая не была создана Drupal, - это модуль Data. Этот модуль обрабатывает любую таблицу в базе данных сайта, которая не используется Drupal, как «потерянную таблицу» и позволяет ее «принять» одним нажатием кнопки.
  • Модуль «Мастер таблиц», очевидно, предоставляет способ сделать это с таблицами, которых нет в базе данных сайта. Но этот модуль недоступен для Drupal 7.
  • Файл «settings.php» в разделе «Настройки базы данных» содержит подробную документацию о том, как определить дополнительные базы данных, с которыми может работать сайт. Но когда база данных определена таким образом, ее таблицы не отображаются в списке потерянных таблиц в модуле данных.

Изменение, которое я внес в определение базы данных в файле «settings.php» одного из моих сайтов:

$databases = array ( 'default' => array ('default' => array ( 'database' => 'db_local', 'username' => 'db_local', 'password' => '_________', 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', 'prefix' => '', ), ), 'extra' => array ('default' => array ( 'database' => 'db__extra', 'username' => 'db_admin', 'password' => '_________, 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', 'prefix' => '', ), ), );

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

  1. Лучше всего, если это возможно: выясните, что есть способ заставить модуль данных распознавать таблицы в дополнительной базе данных, определенной в "settings.php", чтобы он мог их принять.
  2. Используйте префиксы таблиц, чтобы разрешить всем сайтам использовать одну базу данных.
  3. Модуль « Forena Reports », казалось, делал именно то, что мне нужно, но когда я его установил, я не смог заставить его работать. Я отправил проблему 2475645 и не смогу сделать там больше, если только не найдем решение этой проблемы.
  4. Напишите свой собственный модуль, чтобы предоставить Views доступ к дополнительной базе данных, определенной в "settings.php".
  5. Установите Drupal 6 с Table Wizard и используйте его, чтобы получить Views, чтобы увидеть мою внешнюю таблицу, а затем каким-то образом взять полученный результат и поместить его в Drupal 7. (Это предлагалось в некоторых постах.)
  6. Следуйте процедуре, описанной в https://drupal.stackexchange.com/a/3321/45991 , которая начинается с установки патча и, по-видимому, также требует создания моего собственного модуля.
  7. Я также рассмотрел модули Feeds, Feeds SQL, серверная часть Views XML и Migrate, но ни один из них не сказал, что они могут подключить внешнюю базу данных к Views. Я что-то пропустил? Является ли один из них правильным решением?

Вариант 2 не практичен, потому что это приведет к созданию огромной базы данных с сотнями таблиц, которыми будет очень трудно управлять. Я добился значительных успехов в начале работы с Drupal, но я не чувствую себя готовым выполнить задачи 4, 5 или 6. Есть ли какая-то возможность, как вариант 1, работать? Или есть какой-то другой способ заставить Views работать с таблицей вне базы данных сайта, не имея возможности написать свой собственный модуль?

Две дополнительные детали: первая таблица, с которой мне нужно работать, довольно большая, более 6000 строк и около 20 столбцов. Нет никакого намерения предоставлять посетителям сайта доступ к базе данных, за исключением информации, взятой из нее для содержимого страницы.

Спасибо за вашу помощь.

NewSites
источник

Ответы:

2

Я думаю, что модуль Forena действительно делает именно то, что вам нужно . Я думаю, что ваша проблема установки - это только запрос в службу поддержки, а не то, что требует "исправления". После того, как вы решите это, у вас даже будет выбор: да или нет, также использовать интеграцию представлений.

Созданная вами проблема Forena очень хорошо задокументирована (отличная работа!). Но нигде не говорит ничего о разрешениях вы предоставленных (что заставляет меня поверить , что вы можете упустить некоторые из необходимых разрешений). Итак, вот попытка решить эту проблему:

  • Не могли бы вы кратко объяснить, какие из (необходимых) разрешений, связанных с Forena, вы предоставили?

  • Необходимые разрешения Forena описаны в руководстве по установке, которое поставляется вместе с Forena ? К вашему сведению: вот цитата (часть) этого:

    Forena допускает большую степень детализации при составлении отчетов о связанных авторизациях, используя стандартные средства администрирования Drupal для предоставления разрешений ролям. Список разрешений Drupal, связанных с Forena, которые могут быть предоставлены, поначалу может быть немного ошеломляющим. Потому что есть 3 записи для каждого определенного источника данных, и ванильный Forena уже поставляется с 3 источниками данных.

    Чтобы получить это руководство на своем собственном сайте, просто перейдите в /reports/help.setup

Эти разрешения на доступ к «данным» изначально скрыты. Это сделано специально, потому что Forena также очень чувствительна ко всему, что касается предоставления доступа к данным через Forena. Чего бы вы не хотели, так это просто установив и настроив Forena (без прав администратора), вы можете использовать его как обходной путь для доступа к защищенным данным.

Также обратите внимание, что помимо разрешений на уровне всего источника данных у вас есть возможность дополнительно уточнить необходимые разрешения для определенных блоков данных (= пользовательских запросов SQL). Для этого просто укажите такие необходимые (Drupal) разрешения в инструкции SQL (сведения о синтаксисе включены в руководства Forena). Типичный пример использования этого - защита доступа к столбцам с конфиденциальными данными.

Раскрытие информации: я являюсь со- держателем этого модуля,
я надеюсь, что это не нарушает политику сайта по саморекламе .

Pierre.Vriens
источник
Спасибо тебе за это. Когда я впервые прошел установку, я не заметил, что было пять разрешений, которые никому не были предоставлены. Я теперь предоставил их Администратору (то есть мне). В документе «Настройка» не указывается, почему эти разрешения изначально запрещены и есть ли причина не предоставлять их администратору. Тем не менее, у меня теперь есть эти источники данных, так что это решило эту проблему. Есть ли причина, по которой вы ответили здесь, а не в вопросе, который я представил?
NewSites
Здорово читать прогресс! Это как-то компенсирует "отрицательный голос" моего ответа ... К вашему сведению: я также ответил через очередь вопросов сейчас. Итак, теперь, когда «это решило проблему», означает ли это, что вы рассматриваете Forena действительно как «ответ» на ваш вопрос (чего еще не было, как в пуле № 3 ОП)? К вашему сведению: я постараюсь обновить свой ответ здесь, чтобы кратко объяснить, «почему эти разрешения изначально удержаны», что является хорошим дополнительным вопросом!
Pierre.Vriens
Я не был тем, кто отверг твой ответ. Теперь я принял ваш ответ как <u> </ u> и проголосовал против него (что, к сожалению, возвращает только ноль).
Новые сайты
Хм, я не предполагал, что @NewSites понизил голосование, фактически я научился жить с отрицательными голосами. Я лично не люблю понизить голосование вообще, и я игнорирую любой из них, где нет комментариев, чтобы как-то объяснить их. Но, конечно, «одобрение» и «принятие» очень ценится. И, конечно же, зная, что есть еще один пользователь Drupal, который, кажется, открыл Forena сейчас, путь! Обязательно зарегистрируйте (поддержите?) Вопросы, где это уместно (чтобы также увидеть поддержку на работе ...).
Pierre.Vriens
2

Я сделал это успешно несколькими способами:

Используйте представление SQL для создания виртуальной таблицы, db_localкоторая ссылается на соответствующую таблицу в db__extra. Запрос на создание, который будет выглядеть примерно так:

USE db_local; CREATE VIEW some_table AS SELECT * FROM db__extra.some_table;

Затем вы можете ссылаться на это представление SQL, как если бы оно было собственной таблицей в вашей базе данных Drupal, и вам даже не нужно вообще добавлять внешнюю базу данных в settings.php. Обратите внимание, что это может быть несовместимо с модулем данных (см. Https://www.drupal.org/node/1973806 ), но вы должны иметь возможность описать представление SQL для модуля Drupal Views путем реализации hook_views_data()и прекратить использование модуля Data ,

Вот еще одна возможность: использовать префиксы селективных таблиц, чтобы обманом заставить Drupal переписать {some_table} в db__extra.some_table. Это не то же самое, что префикс ваших таблиц Drupal.

Ваша $databasesнастройка будет выглядеть так:

$databases = array ( 'default' => array ('default' => array ( 'database' => 'db_local', 'username' => 'db_local', 'password' => '_________', 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', 'prefix' => array( 'some_table' => 'db__extra.', ), )) );

Опять же, я не уверен, что это совместимо с модулем данных, так как я не использую его. Но это должно работать с представлениями, если вы реализуете hook_views_data()себя.

Les Lim
источник
В обоих методах вы говорите, что мне нужно реализовать <code> hook_views_data () </ code>. Разве это не требует написания модуля? В любом случае, я попробовал определение базы данных в вашем втором методе. Это не привело к тому, что таблица в db_extra появилась в списке потерянных таблиц модуля Data. В вашем первом методе, куда мне поместить предложенный вами запрос (если не в пользовательском модуле)?
NewSites
Если вы создаете представление SQL, вам нужно запустить запрос CREATE VIEW один раз непосредственно в MySQL. Это не должно быть перезапущено.
Les Lim
Прости, я до сих пор не понимаю. Где вы хотите, чтобы я выполнил этот запрос? В phpMyAdmin? Это даст мне то, что я могу использовать в представлениях? Я искал «представление SQL» на Drupal.org и получил drupal.org/project/sql_views , который не имеет производственной загрузки и чей документ на drupal.org/node/2458947 говорит, что мне нужно реализовать хук (который я предполагаю, означает написание модуль), чтобы рассказать модулю Views о моем представлении SQL. Похоже, что то, что вы предлагаете, требует написания модуля (к которому я просто не чувствую себя готовым), а если нет, я просто не понимаю, что вы говорите мне делать.
Новые сайты