Menggunakan Berbilang Pangkalan Data dalam Laravel
Kepelbagaian Laravel meluas hingga mengendalikan berbilang pangkalan data secara serentak. Ikuti langkah ini untuk mencapai ini:
Menentukan Sambungan
Gunakan .env >= 5.0:
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
Dalam 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 <= 4.0:
Dalam app/config/database.php:
return array( 'default' => 'mysql', 'connections' => array( # Primary/Default database connection 'mysql' => array( 'driver' => 'mysql', 'host' => '127.0.0.1', 'database' => 'mysql_database', 'username' => 'root', 'password' => 'secret' 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', ), # Secondary database connection 'pgsql' => [ 'driver' => 'pgsql', 'host' => 'localhost', 'port' => '5432', 'database' => 'pgsql_database', 'username' => 'root', 'password' => 'secret', 'charset' => 'utf8', 'prefix' => '', 'schema' => 'public', ] ), );</p> <p><strong>Skema / Migrasi</strong></p> <p>Tentukan sambungan menggunakan kaedah connection() :</p> <pre class="brush:php;toolbar:false">Schema::connection('pgsql')->create('some_table', function($table) { $table->increments('id'): });
Atau, tentukan sambungan di atas:
protected $connection = 'pgsql';
Pembina Pertanyaan
$users = DB::connection('pgsql')->select(...);
Model
(Laravel >= 5.0)
Tetapkan pembolehubah $connection dalam anda model:
class ModelName extends Model { // extend changed protected $connection = 'pgsql'; }
(Laravel <= 4.0)
class SomeModel extends Eloquent { protected $connection = 'pgsql'; }
Fasih
Transaksi Mod
DB::transaction(function () { DB::connection('mysql')->table('users')->update(['name' => 'John']); DB::connection('pgsql')->table('orders')->update(['status' => 'shipped']); });</p> <p>atau</p> <pre class="brush:php;toolbar:false">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; }
Anda juga boleh menentukan sambungan pada masa jalan:
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; } }
Pertimbangan Hubungan
Mewujudkan perhubungan merentas pangkalan data adalah mungkin tetapi memerlukan pengendalian yang teliti. Ia bergantung pada pangkalan data dan tetapan khusus yang digunakan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Pelbagai Pangkalan Data dalam Laravel?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!