Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menggunakan berbilang sambungan pangkalan data dalam CakePHP?

Bagaimana untuk menggunakan berbilang sambungan pangkalan data dalam CakePHP?

WBOY
WBOYasal
2023-06-04 08:21:561440semak imbas

CakePHP ialah rangka kerja pembangunan PHP yang popular yang menyediakan fungsi dan struktur asas yang diperlukan untuk membangunkan aplikasi web dengan cepat. Dalam aplikasi moden, ia telah menjadi keperluan biasa untuk menggunakan berbilang sambungan pangkalan data, sebagai contoh, untuk mewujudkan sambungan pangkalan data induk-hamba atau untuk memecah data ke dalam pangkalan data yang berbeza. Artikel ini akan memperkenalkan cara menggunakan berbilang sambungan pangkalan data dalam CakePHP.

Sambungan pangkalan data lalai dalam CakePHP

Sebelum kita bermula, mari kita fahami sambungan pangkalan data lalai dalam CakePHP. CakePHP menggunakan fail konfigurasi untuk mengurus maklumat sambungan pangkalan data, yang biasanya disimpan dalam fail config/app.php. Fail ini mengandungi tatasusunan konfigurasi, di mana maklumat konfigurasi sambungan pangkalan data boleh ditetapkan dalam subkunci lalai tatasusunan.

Secara lalai, CakePHP menggunakan MySQL sebagai sambungan pangkalan data utama. Berikut ialah contoh kod:

    'Datasources' => [
        'default' => [
            'className' => 'CakeDatabaseConnection',
            'driver' => 'CakeDatabaseDriverMysql',
            'persistent' => false,
            'host' => 'localhost',
            'username' => 'myuser',
            'password' => 'mypass',
            'database' => 'mydb',
            'encoding' => 'utf8mb4',
            'timezone' => 'UTC',
            'cacheMetadata' => true,
            'quoteIdentifiers' => false,
            'log' => false,
        ],
    ],

Dalam maklumat konfigurasi di atas, kita boleh melihat beberapa item umum, seperti nama kelas sambungan pangkalan data, jenis pemandu, nama pengguna dan kata laluan, dsb.

Menggunakan berbilang sambungan pangkalan data

Untuk menggunakan berbilang sambungan pangkalan data, kami boleh mencipta sambungan pangkalan data baharu dengan menyalin subkunci lalai di atas. Sebagai contoh, kod berikut mencipta sambungan baharu bernama sekunder:

    'Datasources' => [
        'default' => [
            'className' => 'CakeDatabaseConnection',
            'driver' => 'CakeDatabaseDriverMysql',
            '...
        ],
        'secondary' => [
            'className' => 'CakeDatabaseConnection',
            'driver' => 'CakeDatabaseDriverPostgres',
            'persistent' => false,
            'host' => 'localhost',
            'username' => 'myuser',
            'password' => 'mypass',
            'database' => 'mydb2',
            'encoding' => 'utf8',
            'timezone' => 'UTC',
            'cacheMetadata' => true,
            'quoteIdentifiers' => false,
            'log' => false,
        ],
    ],

Dalam kod di atas, kita boleh melihat item konfigurasi sambungan baharu, termasuk nama kelas yang berbeza, jenis pemandu, nama pengguna dan kata laluan, dsb. Sila ambil perhatian bahawa sebagai contoh, untuk maklumat sensitif seperti nama pengguna dan kata laluan, kita harus menggunakan fungsi encrypt() dan decrypt() dalam kelas Crypt untuk menyulitkan dan menyahsulit.

Menggunakan sambungan yang berbeza

Sekarang kami telah menyediakan berbilang sambungan pangkalan data, langkah seterusnya ialah menggunakannya dalam aplikasi kami. Dalam CakePHP, kita boleh menggunakan kelas ConnectionManager untuk mengakses sambungan yang berbeza. Berikut ialah contoh kod:

// 使用默认连接
$users = TableRegistry::get('Users');

// 使用secondary连接
$secondaryConn = ConnectionManager::get('secondary');
$secondaryUsers = TableRegistry::get('Users', [
    'connection' => $secondaryConn
]);

Dalam kod di atas, kita dapat melihat cara kita menggunakan kelas ConnectionManager untuk mendapatkan sambungan yang berbeza. Sebaik sahaja kami mempunyai sambungan, kami boleh menggunakan kelas TableRegistry untuk mendapatkan objek jadual data yang dikaitkan dengan sambungan. Untuk sambungan lalai, kami boleh meninggalkan tidak lulus pilihan sambungan.

Memperluaskan penggunaan sambungan

Apabila menggunakan sambungan, kami boleh melanjutkan lagi untuk memenuhi keperluan aplikasi. Sebagai contoh, kita boleh mencipta kelas sambungan tersuai dengan mewarisi kelas sambungan pangkalan data CakePHP supaya kita boleh mengendalikan sambungan dengan lebih baik. Berikut ialah contoh kod:

class CustomMySqlConnection extends MySqlConnection
{
    public function __construct($config)
    {
        parent::__construct($config);
        $this->_isCustom = true;
    }

    public function customFunction()
    {
        return "Hello from CustomMySqlConnection!";
    }
}

// 使用CustomMySqlConnection来创建连接
'custom' => [
    'className' => 'CustomMySqlConnection',
    'driver' => 'CakeDatabaseDriverMysql',
    '...
],

// 获取custom连接并调用自定义函数
$customConn = ConnectionManager::get('custom');
$customConn->customFunction();

Dalam kod di atas, kami mencipta kelas bernama CustomMySqlConnection untuk melanjutkan kelas MySqlConnection lalai dalam CakePHP. Kelas ini menambah fungsi tersuai dan menetapkan pembolehubah _isCustom kepada benar supaya kita boleh membezakannya daripada sambungan asal dalam aplikasi.

Kesimpulan

Dengan menggunakan kaedah di atas, kami boleh menyediakan dan menggunakan berbilang sambungan pangkalan data dengan mudah dalam CakePHP untuk menyokong keperluan aplikasi yang kompleks. Walaupun sambungan ini kelihatan sangat serupa, menggunakan kelas ConnectionManager dan TableRegistry untuk mendapatkan dan memanipulasinya memberikan kami fleksibiliti untuk menggunakan dan mengurusnya dalam aplikasi kami.

Atas ialah kandungan terperinci Bagaimana untuk menggunakan berbilang sambungan pangkalan data dalam CakePHP?. 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