Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Menggunakan Pelbagai Pangkalan Data dalam Laravel?

Bagaimanakah Saya Boleh Menggunakan Pelbagai Pangkalan Data dalam Laravel?

Patricia Arquette
Patricia Arquetteasal
2024-12-21 20:10:56563semak imbas

How Can I Use Multiple Databases in Laravel?

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!

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