Bagaimanakah CakePHP Boleh Bersambung Secara Dinamik ke Pangkalan Data Berbilang Pengguna Khusus untuk Model Tunggal?

Linda Hamilton
Lepaskan: 2024-11-07 07:07:02
asal
208 orang telah melayarinya

How Can CakePHP Dynamically Connect to Multiple User-Specific Databases for a Single Model?

Menyambung ke Berbilang Pangkalan Data untuk Model Tunggal dalam CakePHP

Dalam CakePHP, mengurus data merentas berbilang pangkalan data boleh menjadi tugas yang mencabar. Soalan ini menyelidiki senario di mana setiap pengguna mempunyai pangkalan data mereka sendiri dan cabarannya terletak pada penyambungan secara dinamik ke pangkalan data yang betul tanpa nama pangkalan data pengekodan keras.

Pengasingan Pangkalan Data Khusus Pengguna

Data pengguna dibahagikan kepada pangkalan data individu untuk menangani masalah undang-undang dan prestasi. Setiap pangkalan data menempatkan berbilang jadual, termasuk jadual "kereta" yang berkaitan dengan soalan ini.

Hubungan Pangkalan Data Pengguna

Nama pangkalan data distrukturkan seperti berikut:

  • apl: Pangkalan data utama apl yang mengandungi jadual pengguna dan kebenaran.
  • app_userX: Pangkalan data yang dimiliki oleh User.id X, menempatkan jadual "kereta" khusus untuk pengguna tersebut.

Pemetaan Jadual Pangkalan Data

Rajah yang disediakan dengan jelas menggambarkan hubungan antara pangkalan data dan jadual dalam persediaan ini.

Sambungan Pangkalan Data Dinamik

Inti masalah ialah mengenal pasti pangkalan data yang betul untuk disambungkan berdasarkan pengguna yang log masuk. Memandangkan pangkalan data dan pengguna ini dicipta secara dinamik, mengubah suai fail app/Config/database.php tidak boleh dilaksanakan.

Melanjutkan Model dan ConnectionManager

Untuk memintas gelagat pangkalan data lalai CakePHP, pembangun mempertimbangkan untuk melanjutkan kelas Model dan ConnectionManager. Walau bagaimanapun, penyelesaian yang lebih mudah ditemui.

AppModel Extension

Penyelesaian terakhir melibatkan pengubahsuaian fail AppModel.php seperti berikut:

class AppModel extends Model
{
    public function setDatabase($database, $datasource = 'default')
    {
        ... (Database configuration logic) ...

        if ( $ds = ConnectionManager::create($nds, $db->config) ) {
            ... (Set Model configuration) ...
            return true;
        }

        return false;
    }
}
Salin selepas log masuk

Pelanjutan ini menyediakan fungsi untuk menetapkan sambungan pangkalan data untuk model secara dinamik.

Contoler Pengawal

Dalam fail CarsController.php, kaedah setDatabase boleh digunakan sebagai berikut:

class CarsController extends AppController
{
    public function index()
    {
        $this->Car->setDatabase('cake_sandbox_client3');

        ...
    }
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah CakePHP Boleh Bersambung Secara Dinamik ke Pangkalan Data Berbilang Pengguna Khusus untuk Model Tunggal?. 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!