Rumah > pembangunan bahagian belakang > tutorial php > Bagaimanakah Saya Boleh Menguruskan Pelbagai Sambungan Pangkalan Data dalam Laravel?

Bagaimanakah Saya Boleh Menguruskan Pelbagai Sambungan Pangkalan Data dalam Laravel?

Patricia Arquette
Lepaskan: 2024-12-23 02:45:30
asal
225 orang telah melayarinya

How Can I Manage Multiple Database Connections in Laravel?

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(...);
Salin selepas log masuk

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
Salin selepas log masuk

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'),
],
Salin selepas log masuk

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');
});
Salin selepas log masuk

Sebagai alternatif, anda boleh menentukan sambungan di bahagian atas kelas:

protected $connection = 'pgsql';
Salin selepas log masuk

Pembina Pertanyaan

Untuk menggunakan Pembina Pertanyaan untuk tertentu sambungan:

$users = DB::connection('pgsql')->select(...);
Salin selepas log masuk

Model

Dalam Laravel 5.0 dan ke atas, anda boleh menetapkan pembolehubah $connection dalam model anda:

class ModelName extends Model {
    protected $connection = 'pgsql';
}
Salin selepas log masuk

Fasih

Dalam Laravel 4.0 dan ke bawah, anda boleh tentukan pembolehubah $connection dalam model anda:

class SomeModel extends Eloquent {
    protected $connection = 'pgsql';
}
Salin selepas log masuk

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']);
});
Salin selepas log masuk

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;
}
Salin selepas log masuk

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;
    }
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan