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
Patricia Arquetteasal
2024-12-23 02:45:30230semak imbas

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(...);

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!

Kenyataan:
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