Rumah > Soal Jawab > teks badan
Saya mahu menggabungkan berbilang pangkalan data dalam sistem saya. Selalunya pangkalan data adalah MySQL; tetapi ia mungkin berbeza pada masa hadapan, iaitu pentadbir boleh menjana laporan seperti ini, yang merupakan sumber menggunakan sistem pangkalan data heterogen.
Jadi soalan saya ialah Adakah Laravel menyediakan Facade untuk menangani situasi ini? Atau adakah rangka kerja lain mempunyai ciri yang lebih sesuai dengan masalah?
P粉9576615442023-10-14 00:28:20
Dalam Laravel 5.1, anda menyatakan sambungan:
$users = DB::connection('foo')->select(...);
Secara lalai, Laravel menggunakan sambungan lalai. Cukup mudah, bukan?
Baca lebih lanjut di sini: http://laravel.com/docs/5.1/database#visit connection
P粉3402642832023-10-14 00:26:49
Dari dokumentasi Laravel : Anda boleh mengakses setiap sambungan apabila menggunakan berbilang sambungan melalui DB
外观上的连接方法。传递给连接方法的名称应与 config/database.php
sepadan dengan salah satu sambungan yang disenaraikan dalam fail konfigurasi:
$users = DB::connection('foo')->select(...);
Gunakan .env
>= 5.0 (atau lebih tinggi)
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
Gunakan 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'), ],
Tidak .env
<= 4.0 (atau lebih rendah)<= 4.0(或更低)
app/config/database.php
return array( 'default' => 'mysql', 'connections' => array( # Primary/Default database connection 'mysql' => array( 'driver' => 'mysql', 'host' => '127.0.0.1', 'database' => 'mysql_database', 'username' => 'root', 'password' => 'secret' 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', ), # Secondary database connection 'pgsql' => [ 'driver' => 'pgsql', 'host' => 'localhost', 'port' => '5432', 'database' => 'pgsql_database', 'username' => 'root', 'password' => 'secret', 'charset' => 'utf8', 'prefix' => '', 'schema' => 'public', ] ), );
Jalankan kaedah connection()
untuk menentukan sambungan yang hendak digunakan.
Schema::connection('pgsql')->create('some_table', function($table) { $table->increments('id'): });
Sebagai alternatif, tentukan sambungan di bahagian atas.
protected $connection = 'pgsql';
$users = DB::connection('pgsql')->select(...);
(dalam Laravel >= 5.0 (atau lebih tinggi))
Tetapkan $connection
pembolehubah
class ModelName extends Model { // extend changed protected $connection = 'pgsql'; }
(dalam Laravel <= 4.0 (atau lebih rendah)) <= 4.0(或更低)中)
Tetapkan $connection
pembolehubah
class SomeModel extends Eloquent { protected $connection = 'pgsql'; }
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; }
Anda juga boleh menentukan sambungan pada masa jalan melalui setConnection
方法或 on
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; } }
Versi Beta (dikemas kini)
Versi | Diuji (T/T) |
---|---|
4.2 | Tidak |
5 | Ya (5.5) |
6 | Tidak |
7 | Tidak |
8 | Ya (8.4) |
9 | Ya (9.2) |