Как подключиться к другой базе данных в Laravel (несколько баз данных СТО) - PullRequest
0 голосов
/ 28 сентября 2019

Итак, у меня есть сотни баз данных, и я хочу изменить, какую базу данных использовать, в зависимости от того, какое значение я передаю

Например, у меня есть много филиалов компании, в которых есть код_отвода (000,001,002,003 и т. Д. До 200),Все они имеют одинаковые таблицы, но были просто созданы в разных базах данных.Также предполагается, что отличается только имя БД.У меня вопрос, как я могу получить доступ к другой базе данных, когда их сотни?Должен ли я динамически изменять файл .env?Должен ли я создать функцию, которая изменяет соединение всякий раз, когда пользователь выбирает другую ветку, и если да, то как?

И да, я попытался соединить две базы данных, настроив и добавив новое соединение с базой данных в config / database.PHP, но я не знаю, как это сделать с сотнями из них.Есть ли более быстрый способ сделать это, может быть, добавить цикл for в database.php?Или, может быть, как-то изменив переменную .env DB_DATABASE.

Ответы [ 2 ]

0 голосов
/ 28 сентября 2019

На самом деле нет другого способа, кроме как установить его в .env, потому что, даже если вы хотите сделать его динамичным, вы должны установить для этого значение, равное 100 ifs, если вы просто хотите просмотреть 100 настроек без написания 100 строк кода, вы можетеустановите цикл в этом файле:

app/config/database.php

как показано ниже:

return array(

    'default' => 'mysql',

    'connections' => array(

        # Primary/Default database connection
        'mysql' => array(
            'driver'    => 'mysql',
            'host'      => '127.0.0.1',
            'database'  => 'database1',
            'username'  => 'root',
            'password'  => 'secret'
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
        ),

        # You loop here
        'mysql2' => array(
            'driver'    => 'mysql',
            'host'      => '127.0.0.1',
            'database'  => 'database2',
            'username'  => 'root',
            'password'  => 'secret'
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
        ),
    ),
);

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

Вы можете установить в файле Env, как показано ниже:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database1
DB_USERNAME=root
DB_PASSWORD=secret

DB_CONNECTION_SECOND=mysql
DB_HOST_SECOND=127.0.0.1
DB_PORT_SECOND=3306
DB_DATABASE_SECOND=database2
DB_USERNAME_SECOND=root
DB_PASSWORD_SECOND=secret

, а затем вы можете зайти в ваш condif / database.php и выполнить настройку, как показано ниже:

'mysql2' => [
    'driver'    => env('DB_CONNECTION_SECOND'),
    'host'      => env('DB_HOST_SECOND'),
    'port'      => env('DB_PORT_SECOND'),
    'database'  => env('DB_DATABASE_SECOND'),
    'username'  => env('DB_USERNAME_SECOND'),
    'password'  => env('DB_PASSWORD_SECOND'),
],

, а затем в своем красноречивом сообщении вы можете использовать следующее:

$users = DB::connection('mysql2')->select(...);

Надеюсь, это поможет вам заметить: вы можете обратиться к этой ссылке для получения дополнительной информации

https://fideloper.com/laravel-multiple-database-connections
0 голосов
/ 28 сентября 2019

Самое простое решение - настроить конфигурацию базы данных во время выполнения.Laravel может ожидать, что эти настройки будут загружены из файла config / database.php, но это не значит, что вы не сможете установить или изменить их позже.

Конфигурация, загруженная из config / database.phpхранится как база данных в конфигурации Laravel.Это означает, что массив соединений внутри config / database.php хранится в database.connections.

Таким образом, вы можете легко переопределить / изменить эти соединения следующим образом:

Config::set("database.connections.mysql", [
    "host" => "...",
    "database" => "...",
    "username" => "...",
    "password" => "..."
]);

С этого момента,все модели Eloquent, использующие это соединение mysql, будут использовать эту новую конфигурацию соединения с базой данных.

Я бы порекомендовал сделать это в сервис-провайдере, если это возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...