Sök…


Flera databasanslutningar

Laravel tillåter användare att arbeta med flera databasanslutningar. Om du behöver ansluta till flera databaser och få dem att fungera tillsammans är du uppmärksam på anslutningsinställningen.

Du tillåter också att använda olika typer av databaser i samma applikation om det behövs.

Standardanslutning I config/database.php kan du se konfigurationsobjektets samtal:

'default' => env('DB_CONNECTION', 'mysql'),

Detta namn hänvisar till anslutningarnas namn mysql nedan:

'connections' => [

    'sqlite' => [
        'driver' => 'sqlite',
        'database' =>  database_path('database.sqlite'),
        'prefix' => '',
    ],

    'mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', 'localhost'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'charset' => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix' => '',
        'strict' => false,
        'engine' => null,
    ],
],

Om du inte nämnde namnet på databasanslutningen i andra koder eller kommandon hämtar Laravel standarddatabasanslutningsnamnet. Men i flera databasanslutningar, även om du ställer in standardanslutningen, har du bättre inställt överallt vilken databasanslutning du använde.

Migrationsfil

I migreringsfilen, om en enda databasanslutning, kan du använda:

 Schema::create("table",function(Blueprint $table){
     $table->increments('id');
});

I flera databasanslutningar använder du connection() för att berätta för Laravel vilken databasanslutning du använder:

 Schema::connection("sqlite")->create("table",function(Blueprint $table){
     $table->increments('id');
});

Hantverkare migrera

om du använder en enda databasanslutning kör du:

php artisan migrate

Men för flera databasanslutningar ska du bättre berätta vilken databasanslutning som behåller migrationsdata. så du kör följande kommando:

php artisan migrate:install --database=sqlite

Detta kommando installerar migreringstabellen i måldatabasen för att förbereda migrering.

php artisan migrate --database=sqlite

Detta kommando kör migrering och sparar migrationsdata i måldatabasen

php artisan migrate:rollback --database=sqlite

Detta kommando rullar tillbaka migreringen och sparar migrationsdata i måldatabasen

Vältalig modell

För att ange en databasanslutning med Eloquent måste du definiera egenskapen $connection :

namespace App\Model\Sqlite;
class Table extends Model
{
    protected $table="table";
    protected $connection = 'sqlite';
}

Så här anger du en annan (andra) databasanslutning med Eloquent:

namespace App\Model\MySql;
class Table extends Model
{
    protected $table="table";
    protected $connection = 'mysql';
}

Laravel använder egenskapen $connection definierad i en modell för att använda den angivna anslutningen definierad i config/database.php . Om egenskapen $connection inte definieras i en modell kommer standard att användas.

Du kan också ange en annan anslutning med metoden statisk on :

// Using the sqlite connection
Table::on('sqlite')->select(...)->get()
// Using the mysql connection
Table::on('mysql')->select(...)->get()

Databas / frågeställare

Du kan också ange en annan anslutning med frågeformuläret:

// Using the sqlite connection
DB::connection('sqlite')->table('table')->select(...)->get()
// Using the mysql connection
DB::connection('mysql')->table('table')->select(...)->get()  

Enhetstest

Laravel ger seeInDatabase($table,$fielsArray,$connection) att testa databasanslutningskod. I enhetens testfil måste du göra som:

$this
    ->json(
        'GET',
        'result1/2015-05-08/2015-08-08/a/123'
    )
     ->seeInDatabase("log", ["field"=>"value"], 'sqlite');

På detta sätt vet Laravel vilken databasanslutning som ska testas.

Databastransaktioner i enhetstest

Laravel tillåter databas att återföra alla ändringar under testen. För att testa flera databasanslutningar måste du ställa in $connectionsToTransact egenskaper

use Illuminate\Foundation\Testing\DatabaseMigrations;

class ExampleTest extends TestCase
{
     use DatabaseTransactions;

     $connectionsToTransact =["mysql","sqlite"] //tell Laravel which database need to rollBack

    public function testExampleIndex()
    {
        $this->visit('/action/parameter')
         ->see('items');
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow