簡體   English   中英

如何連接到 Laravel 中的另一個數據庫(多數據庫 HUNDREDS)

[英]How to connect to another database in Laravel (Multiple Database HUNDREDS)

所以我有數百個數據庫,我想根據我傳入的值更改要使用的數據庫

例如,我有許多公司分支機構,它們都有 branch_code(000,001,002,003 等,最多 200)。 它們都有相同的表,但只是在不同的數據庫中創建的。 還假設只有數據庫名稱不同。 我的問題是當有數百個數據庫時如何訪問不同的數據庫? 我應該動態更改 .env 文件嗎? 我是否應該制作一個 function 以在用戶選擇另一個分支時更改連接,如果是的話,如何?

是的,我嘗試通過在 config/database.php 中配置和添加新的數據庫連接來連接兩個數據庫,但我不知道如何處理數百個數據庫。 有沒有更快的方法,也許在數據庫中添加一個for循環。php? 或者可能以某種方式更改 .env DB_DATABASE 變量。

最簡單的解決方案是在運行時設置數據庫配置。 Laravel 可能希望從 config/database.php 文件加載這些設置,但這並不意味着您以后不能設置或更改它們。

從 config/database.php 加載的配置作為數據庫存儲在 Laravel 配置中。 這意味着,config/database.php 中的連接數組存儲在 database.connections 中。

因此,您可以像這樣輕松覆蓋/更改這些連接:

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

從那時起,任何使用此 mysql 連接的 Eloquent 型號都將使用此新的數據庫連接配置。

如果可能,我建議在服務提供商處執行此操作。

實際上除了在.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'    => '',
        ),
    ),
);

這是最簡單的方法。 所以在這里按照下面的說明,然后在您的 eloquent 中,您應該指定要用於該查詢的數據庫連接:!

您可以在 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

然后您可以將 go 放入您的 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'),
],

然后在你的 eloquent 中你可以使用如下:

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

希望這可以幫助您注意:您可以參考此鏈接以獲取更多信息

https://fideloper.com/laravel-multiple-database-connections

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM