sql >> Databasteknik >  >> RDS >> Mysql

Hur man använder flera databaser i Laravel

Använda .env>=5.0 (Testat den 5.5) (Fungerar på 8 )

I .env

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database1
DB_USERNAME=root
DB_PASSWORD=secret

DB_CONNECTION_SECOND=mysql
DB_HOST_SECOND=127.0.0.1
DB_PORT_SECOND=3306
DB_DATABASE_SECOND=database2
DB_USERNAME_SECOND=root
DB_PASSWORD_SECOND=secret

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

'mysql2' => [
    'driver'    => env('DB_CONNECTION_SECOND'),
    'host'      => env('DB_HOST_SECOND'),
    'port'      => env('DB_PORT_SECOND'),
    'database'  => env('DB_DATABASE_SECOND'),
    'username'  => env('DB_USERNAME_SECOND'),
    'password'  => env('DB_PASSWORD_SECOND'),
],

Obs! I mysql2 om DB_username och DB_password är samma, kan du använda env('DB_USERNAME') som anges i .env första raderna.

Utan .env <5.0

Definiera anslutningar

app/config/database.php

return array(

    'default' => 'mysql',

    'connections' => array(

        # Primary/Default database connection
        'mysql' => array(
            'driver'    => 'mysql',
            'host'      => '127.0.0.1',
            'database'  => 'database1',
            'username'  => 'root',
            'password'  => 'secret'
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
        ),

        # Secondary database connection
        'mysql2' => array(
            'driver'    => 'mysql',
            'host'      => '127.0.0.1',
            'database'  => 'database2',
            'username'  => 'root',
            'password'  => 'secret'
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
        ),
    ),
);

Schema

För att ange vilken anslutning som ska användas, kör bara connection() metod

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

Frågebyggaren

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

Vältalande

Ställ in $connection variabel i din modell

class SomeModel extends Eloquent {

    protected $connection = 'mysql2';

}

Du kan också definiera anslutningen under körning via setConnection metoden eller on statisk metod:

class SomeController extends BaseController {

    public function someMethod()
    {
        $someModel = new SomeModel;

        $someModel->setConnection('mysql2'); // non-static method

        $something = $someModel->find(1);

        $something = SomeModel::on('mysql2')->find(1); // static method

        return $something;
    }

}

Obs Var försiktig med att försöka bygga relationer med tabeller över databaser! Det är möjligt att göra, men det kan komma med vissa varningar och beror på vilka databas- och/eller databasinställningar du har.

Från Laravel Docs

Använda flera databasanslutningar

När du använder flera anslutningar kan du komma åt varje connection via anslutningsmetoden på DB Fasad. name skickas till connection metod bör motsvara en av anslutningarna som anges i din config/database.php konfigurationsfil:

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

Du kan också komma åt den råa, underliggande PDO-instansen med getPdo-metoden på en anslutningsinstans:

$pdo = DB::connection()->getPdo();

Användbara länkar

  1. Laravel 5 multipel databasanslutning FRÅN laracasts.com
  2. Anslut flera databaser i laravel FRÅN tutsnare.com
  3. Flera DB-anslutningar i Laravel FRÅN fideloper.com


  1. Varför anses det vara dålig praxis att använda markörer i SQL Server?

  2. Hur kan jag komma runt MySQL Errcode 13 med SELECT INTO OUTFILE?

  3. Få tillgång till webbtjänst från Oracles lagrade procedur

  4. Hur man installerar SQL Developer på en Mac