簡介
現代應用程式通常需要存取多個資料庫來管理通常需要存取多個資料庫來管理通常需要存取多個資料庫來管理通常需要存取多個資料庫不同的資料來源。 Laravel 透過提供一系列功能將多個資料庫無縫整合到您的應用程式中,從而簡化了此過程。
利用 DB Facade
在 Laravel 建立與不同資料庫的連接,利用資料庫門面的連接方法。您定義的每個連線都對應於 config/database.php 檔案中的一個設定項目。
定義資料庫連線
使用 .env 或 config/database 設定資料庫連線.php 檔案。這是使用.env 的範例:
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=mysql_database DB_USERNAME=root DB_PASSWORD=secret DB_CONNECTION_PGSQL=pgsql DB_HOST_PGSQL=127.0.0.1 DB_PORT_PGSQL=5432 DB_DATABASE_PGSQL=pgsql_database DB_USERNAME_PGSQL=root DB_PASSWORD_PGSQL=secret
在config/database.php 中,您可以如下定義連線:
'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST'), 'database' => env('DB_DATABASE'), 'username' => env('DB_USERNAME'), 'password' => env('DB_PASSWORD') ], 'pgsql' => [ 'driver' => 'pgsql', 'host' => env('DB_HOST_PGSQL'), 'database' => env('DB_DATABASE_PGSQL'), 'username' => env('DB_USERNAME_PGSQL'), 'password' => env('DB_PASSWORD_PGSQL') ]
使用多個資料庫
定義連接後,您可以使用連接方法存取它們,如下所示範例:
// Database operations on 'mysql' database $users = DB::connection('mysql')->select(...); // Database operations on 'pgsql' database $orders = DB::connection('pgsql')->select(...);
架構、遷移和查詢產生器
要對特定資料庫執行架構、遷移或查詢產生器操作,請使用連接方式:
// Schema operations on 'pgsql' database Schema::connection('pgsql')->create('some_table', function($table) {}); // Migrations on 'mysql' database Artisan::call('migrate', ['--connection' => 'mysql']); // Query builder operations on 'pgsql' database $results = DB::connection('pgsql')->select(...);
型號與Eloquent
要為模型或Eloquent 操作使用特定資料庫,請在模型中設定 $connection 屬性:
// Model using 'pgsql' database class User extends Model { protected $connection = 'pgsql'; }
事務管理
要跨多個資料庫執行事務,請使用事務method:
DB::transaction(function () { DB::connection('mysql')->table('users')->update(['name' => 'John']); DB::connection('pgsql')->table('orders')->update(['status' => 'shipped']); });
運行時連接選擇
您也可以使用setConnection 方法或on static 方法動態變更資料庫連線:
// Runtime connection change $someModel = new SomeModel; $someModel->setConnection('pgsql'); // Static connection change $something = SomeModel::on('pgsql')->find(1);
注意:在跨資料庫的表之間建立關係時要小心。這是可能的,但可能會帶來複雜性。
以上是Laravel 中如何有效率地連接和管理多個資料庫?的詳細內容。更多資訊請關注PHP中文網其他相關文章!