Mengakses Hubungan BelongsToMany Merentasi Pelbagai Pangkalan Data dalam Laravel
Apabila bekerja dengan model yang disimpan dalam pangkalan data yang berbeza, anda mungkin menghadapi masalah dengan hubungan belongsToMany Laravel apabila jadual pangsi tidak berada dalam pangkalan data yang sama dengan model sasaran. Untuk mengatasinya, adalah perlu untuk menyatakan secara eksplisit nama pangkalan data jadual pangsi.
Untuk melakukan ini, ubah suai perhubungan belongsToMany dalam model yang mengandungi jadual pangsi seperti berikut:
<code class="php">public function bs() { $database = $this->getConnection()->getDatabaseName(); return $this->belongsToMany('B', "$database.a_bs", 'a_id', 'b_id'); }</code>
Pendekatan ini memastikan Laravel mencari jadual pangsi dalam pangkalan data yang sepadan dengan model yang memegang perhubungan, sekali gus menyelesaikan isu tersebut.
Walau bagaimanapun, jika projek anda menggunakan pangkalan data SQLite dan anda berhasrat untuk menjalankan ujian unit, pertimbangan tambahan adalah perlu. SQLite memerlukan melampirkan pangkalan data sasaran pada sambungan ujian untuk memudahkan akses kepada jadual pangsi. Ini boleh dicapai dengan kod berikut:
<code class="php">public function bs() { $database = $this->getConnection()->getDatabaseName(); if (is_file($database)) { $connection = app('B')->getConnection()->getName(); $name = $this->getConnection()->getName(); \Illuminate\Support\Facades\DB::connection($connection)->statement("ATTACH DATABASE '$database' AS $name"); $database = $name; } return $this->belongsToMany('B', "$database.a_bs", 'a_id', 'b_id'); }</code>
Adalah penting untuk mengambil kira penggunaan transaksi. Jika sambungan semasa menggunakan urus niaga, kenyataan ATTACH DATABASE akan gagal. Sebaliknya, jika sambungan berkaitan menggunakan urus niaga, data yang terhasil akan disembunyikan daripada sambungan semasa.
Untuk membersihkan selepas pangkalan data anda yang dilampirkan, anda boleh sama ada melaksanakan rollback migrasi atau memotong jadual sambil mengekalkan strukturnya.
Pilihan lain termasuk menyalin pangkalan data yang dilampirkan ke fail sementara dan menggantikan sumber selepas ujian atau menggunakan sifat fail pangkalan data SQLite yang mudah diakses.
Atas ialah kandungan terperinci Bagaimana untuk Mengakses Hubungan BelongsToMany Merentasi Pelbagai Pangkalan Data dalam Laravel?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!