Cara menggunakan berbilang pangkalan data dalam Laravel
P粉919464207
P粉919464207 2023-10-13 09:54:58
0
2
509

Saya mahu menggabungkan berbilang pangkalan data dalam sistem saya. Selalunya pangkalan data adalah MySQL; tetapi ia mungkin berbeza pada masa hadapan, iaitu pentadbir boleh menjana laporan seperti ini, yang merupakan sumbermenggunakan sistem pangkalan data heterogen.

Jadi soalan saya ialahAdakah Laravel menyediakan Facadeuntuk menangani situasi ini? Atau adakah rangka kerja lain mempunyai ciri yang lebih sesuai dengan masalah?

P粉919464207
P粉919464207

membalas semua (2)
P粉957661544

Dalam Laravel 5.1, anda menyatakan sambungan:

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

Secara lalai, Laravel menggunakan sambungan lalai. Cukup mudah, bukan?

Baca lebih lanjut di sini:http://laravel.com/docs/5.1/database#visit connection

    P粉340264283

    Dari dokumentasi Laravel: Anda boleh mengakses setiap sambungan apabila menggunakan berbilang sambungan melaluiDB外观上的连接方法。传递给连接方法的名称应与config/database.phpsepadan dengan salah satu sambungan yang disenaraikan dalam fail konfigurasi:

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

    Tentukan sambungan

    Gunakan.env>= 5.0 (atau lebih tinggi)

    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

    Gunakanconfig/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'), ],

    Tidak.env

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

    Seni bina/Migrasi

    Jalankan kaedahconnection()untuk menentukan sambungan yang hendak digunakan.

    Schema::connection('pgsql')->create('some_table', function($table) { $table->increments('id'): });

    Sebagai alternatif, tentukan sambungan di bahagian atas.

    protected $connection = 'pgsql';

    Pembina Pertanyaan

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

    Model

    (dalam Laravel >= 5.0 (atau lebih tinggi))

    Tetapkan$connectionpembolehubah

    dalam model
    class ModelName extends Model { // extend changed protected $connection = 'pgsql'; }

    fasih

    (dalam Laravel

    Tetapkan$connectionpembolehubah

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

    Mod Dagangan

    DB::transaction(function () { DB::connection('mysql')->table('users')->update(['name' => 'John']); DB::connection('pgsql')->table('orders')->update(['status' => 'shipped']); });

    atau

    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 melaluisetConnection方法或onkaedah statik:

    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; } }

    Versi Beta (dikemas kini)

    Versi Diuji (T/T)
    4.2 Tidak
    5 Ya (5.5)
    6 Tidak
    7 Tidak
    8 Ya (8.4)
    9 Ya (9.2)
      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!