Ricerca…


Più connessioni al database

Laravel consente agli utenti di lavorare su più connessioni di database. Se è necessario connettersi a più database e farli funzionare insieme, si deve fare attenzione alla configurazione della connessione.

Consenti anche di utilizzare diversi tipi di database nella stessa applicazione se richiesto.

Connessione predefinita In config/database.php , è possibile visualizzare la chiamata all'elemento di configurazione:

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

Questo nome fa riferimento al nome mysql qui sotto:

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

Se non hai menzionato il nome della connessione al database in altri codici o comandi, Laravel prenderà il nome della connessione al database predefinito. tuttavia, in più connessioni di database, anche se si imposta la connessione predefinita, è meglio configurare ovunque la connessione al database utilizzata.

File di migrazione

Nel file di migrazione, se una singola connessione al database, è possibile utilizzare:

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

Nella connessione a più database, si utilizzerà il metodo connection() per comunicare a Laravel quale connessione di database si utilizza:

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

Artisan Migrate

se utilizzi una singola connessione al database, eseguirai:

php artisan migrate

Tuttavia, per una connessione a più database, è meglio dire quale connessione al database mantiene i dati di migrazione. quindi eseguirai il seguente comando:

php artisan migrate:install --database=sqlite

Questo comando installerà la tabella di migrazione nel database di destinazione per preparare la migrazione.

php artisan migrate --database=sqlite

Questo comando eseguirà la migrazione e salverà i dati di migrazione nel database di destinazione

php artisan migrate:rollback --database=sqlite

Questo comando eseguirà il rollback della migrazione e salverà i dati di migrazione nel database di destinazione

Modello eloquente

Per specificare una connessione al database usando Eloquent, è necessario definire la proprietà $connection :

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

Per specificare un'altra (seconda) connessione al database usando Eloquent:

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

Laravel utilizzerà la proprietà $connection definita in un modello per utilizzare la connessione specificata definita in config/database.php . Se la proprietà $connection non è definita in un modello, verrà utilizzato il valore predefinito.

Puoi anche specificare un'altra connessione usando il metodo statico on :

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

Database / generatore di query

Puoi anche specificare un'altra connessione usando il generatore di query:

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

Test unitario

Laravel fornisce seeInDatabase($table,$fielsArray,$connection) per testare il codice di connessione del database. Nel file di test dell'unità, è necessario fare come:

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

In questo modo, Laravel saprà quale connessione di database testare.

Transazioni del database in Unit Test

Laravel consente al database di eseguire il rollback di tutte le modifiche durante i test. Per testare più connessioni di database, è necessario impostare $connectionsToTransact properties

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow