Menyambungkan Berbilang Pangkalan Data dengan Laravel
Untuk mengurus berbilang pangkalan data dalam sistem Laravel, Laravel menawarkan penyelesaian serba boleh melalui muka depan pangkalan datanya.
Menggunakan Pangkalan Data Sambungan
Apabila menggunakan berbilang sambungan pangkalan data, anda boleh mengakses setiap sambungan menggunakan kaedah sambungan pada fasad DB. Nama yang diberikan kepada kaedah sambungan sejajar dengan nama yang ditakrifkan dalam fail konfigurasi config/database.php:
$users = DB::connection('foo')->select(...);
Definisi Sambungan
Sambungan pangkalan data boleh dikonfigurasikan menggunakan fail .env atau fail config/database.php:
Menggunakan Fail .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
Menggunakan fail config/database.php:
'mysql' => [ 'driver' => env('DB_CONNECTION'), 'host' => env('DB_HOST'), 'port' => env('DB_PORT'), 'database' => env('DB_DATABASE'), 'username' => env('DB_USERNAME'), 'password' => env('DB_PASSWORD'), ], 'pgsql' => [ 'driver' => env('DB_CONNECTION_PGSQL'), 'host' => env('DB_HOST_PGSQL'), 'port' => env('DB_PORT_PGSQL'), 'database' => env('DB_DATABASE_PGSQL'), 'username' => env('DB_USERNAME_PGSQL'), 'password' => env('DB_PASSWORD_PGSQL'), ],
Skema dan Migrasi
Untuk menentukan sambungan untuk digunakan untuk skema dan migrasi, gunakan sambungan() kaedah:
Schema::connection('pgsql')->create('some_table', function ($table) { $table->increments('id'); });
Sebagai alternatif, anda boleh menentukan sambungan di bahagian atas kelas:
protected $connection = 'pgsql';
Pembina Pertanyaan
Untuk menggunakan Pembina Pertanyaan untuk tertentu sambungan:
$users = DB::connection('pgsql')->select(...);
Model
Dalam Laravel 5.0 dan ke atas, anda boleh menetapkan pembolehubah $connection dalam model anda:
class ModelName extends Model { protected $connection = 'pgsql'; }
Fasih
Dalam Laravel 4.0 dan ke bawah, anda boleh tentukan pembolehubah $connection dalam model anda:
class SomeModel extends Eloquent { protected $connection = 'pgsql'; }
Mod Transaksi
Untuk mengurus transaksi merentas berbilang pangkalan data:
DB::transaction(function () { DB::connection('mysql')->table('users')->update(['name' => 'John']); DB::connection('pgsql')->table('orders')->update(['status' => 'shipped']); });
atau
DB::connection('mysql')->beginTransaction(); try { DB::connection('mysql')->table('users')->update(['name' => 'John']); DB::connection('pgsql')->beginTransaction(); DB::connection('pgsql')->table('orders')->update(['status' => 'shipped']); DB::connection('pgsql')->commit(); DB::connection('mysql')->commit(); } catch (\Exception $e) { DB::connection('mysql')->rollBack(); DB::connection('pgsql')->rollBack(); throw $e; }
Sambungan Masa Jalan Pengurusan
Anda juga boleh mewujudkan sambungan pada masa jalan menggunakan kaedah setConnection atau kaedah statik:
class SomeController extends BaseController { public function someMethod() { $someModel = new SomeModel; $someModel->setConnection('pgsql'); // non-static method $something = $someModel->find(1); $something = SomeModel::on('pgsql')->find(1); // static method return $something; } }
Awas
Apabila mewujudkan hubungan dengan jadual merentas pangkalan data yang berbeza, adalah penting untuk berhati-hati kerana kemungkinan kaveat berdasarkan pangkalan data dan tetapan anda menggaji.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menguruskan Pelbagai Sambungan Pangkalan Data dalam Laravel?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!