EE3-> Многократные Параллельные Соединения с базой данных с помощью файлов конфигурации

мы преобразовали в 3.3.3 от 2.5.5 .

параллельная связь со вторичной базой данных (настроенное использование Конфигурация Владельца Focus Lab в обеих версиях) работает в 2.5.5 , но я получаю предупреждения в 3.3.3 с Предупреждением сообщения

Незаконная последовательность возместила 'имя хоста'.

это наконец полностью терпит неудачу, когда это пытается управлять вопросом и столами префиксов с основной связью db имя вместо вторичного имени db.

его погрузка основной связи db вместо вторичной связи - все названия таблиц предварительно фиксируется с основной связью db имя.

we used this syntax in 2.5.5 - $this->EE->load->database('secondary_connection', TRUE);

и в окружающей среде определенная конфигурация для моего местного жителя

$env_config['database'] = array (

'expressionengine' => array (
        'hostname' => 'localhost',
        'username' => 'xxxx',
        'password' => 'xxxxx',
        'database' => 'xxxxx',
        'dbdriver' => 'mysqli',
        'dbprefix' => 'exp_',
        'pconnect' => FALSE
    ),

'ext_db_components' =>
    array (
            'hostname' => 'localhost',
            'username' => 'xxxxx',
            'password' => 'xxxxx',
            'database' => 'xxxxx',
            'dbdriver' => 'mysqli',
            'dbprefix' => '',
            'pconnect' => FALSE,
            'cache_on' => FALSE,
    ),

);

ошибка появляется на странице, которая называет модель.

в одном из образцовых методов это должно получить доступ к внешнему db (размещенный на том же самом MySQL сервере).

in EE2, loading that external connection using
$this->components_db = $this->EE->load->database('ext_db_components', TRUE);
let us query against it using active record.

та же самая линия кода в <сильном> EE3 бросает Незаконные предупреждения 'имени хоста' погашения последовательности перед окончательным провалом за MySQL исключением.

FYI - it does appear to be calling the legacy db.php connector (/system/ee/legacy/database/DB.php) rather than the EE3 db connector

есть ли способ одновременно соединить с внешним db использование параметров настройки конфигурации в 3.3.3?

NOTE: I am not asking about switching primary connections based on environment - i need multiple concurrent connections in the same environment.

1
nl ja de
Та же самая проблема/ошибки здесь, за незначительным исключением, что мы используем базу данных $db2 = ee ()-> load-> (' second_database' верный); Задающийся вопросом, есть ли у кого-либо ответ на эту проблему. It' s что-то вроде выставочного стопора для использования EE3.
добавлено автор Kieron, источник

1 ответы

Please see the documentation for full details: Connecting to an External Database

Но основной образец для вращения отдельного соединения с БД в v3 был бы:

  1. Create a DBConfig object from your database's connection settings
  2. Create a new Database object using the DBConfig object
  3. Issue queries to a Query object on the new database with ->newQuery(), using all standard methods (select(), get(), etc.)

Шаг 1 достигается со следующим (гарантируйте, чтобы ваши ссылки класса пространство имен с использовали EllisLab\ExpressionEngine\Service\Database; :

$db_config = new Database\DBConfig(ee('Config')->getFile());
$db_config->getGroupConfig('other_db');

Шаг 2 с:

$db = new Database\Database($db_config);

И Шаг 3, ваши вопросы с:

$query = $db->newQuery()->get('my_table');

Тот образец лучше всего осуществляется как services in your addon.setup.php file. Это удостоверяется, что вы только соединяете одно время для каждого запроса страницы, и сохраняет ваш синтаксис простым, и согласовывающимся со связями с базой данных ExpressionEngine.

'services' => array(

 //This service will be used to query our external database
 //e.g., ee('my_addon:db')->select()
  'db' => function($addon)
  {
    return $addon->make('my_addon:Database')->newQuery();
  },

 //This service manages our external database connection
 //e.g., ee('my_addon:Database')->getLog()
  'Database' => function($addon)
  {
   //Makes sure we only do this work once per page request
    static $db;

    if (empty($db))
    {
     //fetch config from system/user/config/my_addon_database.php
      $config = ee('Config')->getFile('my_addon_database');

     //create the DBConfig object
      $db_config = new Database\DBConfig($config);

     //select the database connection group
      $db_config->getGroupConfig('my_addon');

     //connect to and make the Database object
      $db = new Database\Database($db_config);
    }

    return $db;
  }
)

Doing this will let you make calls using ee('my_addon:db')-> exactly as you would ee('db')-> to the ExpressionEngine database.

4
добавлено
Ближе, но не совсем там все же. Теперь получение: Аргумент 1 прошел к EllisLab/ ExpressionEngine/ Service/ Database/ База данных:: __ const‌ ​ ruct() должен быть случаем EllisLab/ ExpressionEngine/ Service/ Database/ DBConfig, множество, данное
добавлено автор Kieron, источник
Проверенный, что $db_config-> getGroupConfig (' secondary_database') возвращает множество и не случай DBConfig. Ошибка или другой способ получить надлежащий случай?
добавлено автор Kieron, источник
Было бы хорошо видеть эти виды вещей, добавленных к докторам перехода для EE2-> EE3
добавлено автор Kieron, источник
Извините, шел по памяти и it' s некоторое время, так как я соединился со вторичной базой данных в рамках приложения. Отредактированный ответ, сообщите мне, есть ли у вас проблемы, используя его теперь.
добавлено автор littlecharva, источник
Обновленный ответ и добавил ссылку на документацию;)
добавлено автор littlecharva, источник
dbGeeks
dbGeeks
545 участник(ов)

Чат про базы данных, их устройство и приемы работы с ними. Разрешаются любые адеватные дискуссии в рамках тематики чата.

Разработка СУБД
Разработка СУБД
143 участник(ов)