[英]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.