Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk Menguruskan Pelbagai Sambungan Pangkalan Data dalam Laravel?

Bagaimana untuk Menguruskan Pelbagai Sambungan Pangkalan Data dalam Laravel?

DDD
DDDasal
2025-01-04 11:11:35404semak imbas

How to Manage Multiple Database Connections in Laravel?

Mengurus Berbilang Pangkalan Data dalam Laravel

Apabila bekerja dengan aplikasi Laravel, adalah perkara biasa untuk menghadapi situasi di mana berbilang pangkalan data diperlukan. Dalam kes sedemikian, adalah penting untuk memahami cara mengurus dan berinteraksi secara berkesan dengan pangkalan data ini dalam aplikasi Laravel anda.

Fasad Pangkalan Data Laravel

Laravel menyediakan fasad DB, yang berfungsi sebagai titik pusat untuk mengakses sambungan pangkalan data yang berbeza. Dengan menggunakan kaedah sambungan yang disediakan oleh fasad DB, pembangun boleh mewujudkan dan mendapatkan semula sambungan kepada berbilang pangkalan data. Kaedah sambungan menjangkakan parameter yang sepadan dengan nama sambungan yang ditakrifkan dalam fail konfigurasi config/database.php.

$users = DB::connection('foo')->select(...);

Mengkonfigurasi Sambungan Pangkalan Data

Menggunakan .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 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'),
],

Tanpa .env (Laravel <= 4.0):

return array(
    'default' => 'mysql',
    'connections' => array(
        'mysql' => array(
            'driver' => 'mysql',
            'host' => '127.0.0.1',
            'database' => 'mysql_database',
            'username' => 'root',
            'password' => 'secret',
            'charset' => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix' => '',
        ),

        'pgsql' => [
            'driver' => 'pgsql',
            'host' => 'localhost',
            'port' => '5432',
            'database' => 'pgsql_database',
            'username' => 'root',
            'password' => 'secret',
            'charset' => 'utf8',
            'prefix' => '',
            'schema' => 'public',
        ]
    ),
);<h3>Pertanyaan dan Model Manipulasi</h3>
<p><strong>Skema</strong>:</p>
<p>Kaedah sambungan boleh digunakan untuk menentukan pangkalan data untuk operasi skema:</p>
<pre class="brush:php;toolbar:false">Schema::connection('pgsql')->create('some_table', function($table){ ... });

Pertanyaan Pembina:

$users = DB::connection('pgsql')->select(...);

Model:

Sambungan boleh ditakrifkan secara eksplisit dalam model kelas:

class ModelName extends Model {
    protected $connection = 'pgsql';
}

Fasih:

class SomeModel extends Eloquent {
    protected $connection = 'pgsql';
}

Transaksi

Transaksi juga boleh diuruskan merentas berbilang pangkalan data:

DB::transaction(function () {
    DB::connection('mysql')->table('users')->update(...);
    DB::connection('pgsql')->table('orders')->update(...);
});

Pengurusan Sambungan Masa Jalan

Sambungan boleh ditetapkan secara dinamik:

$someModel = new SomeModel;
$someModel->setConnection('pgsql'); // non-static
$something = $someModel->find(1);
$something = SomeModel::on('pgsql')->find(1); // static

Perhubungan dan Kaveat

Apabila berurusan dengan perhubungan merentas pangkalan data yang berbeza, berhati-hati. Ia mungkin tetapi mungkin memerlukan pertimbangan yang teliti terhadap persediaan dan tetapan pangkalan data.

Atas ialah kandungan terperinci Bagaimana untuk 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