Buscar..


Conexiones de base de datos múltiples

Laravel permite al usuario trabajar en múltiples conexiones de base de datos. Si necesita conectarse a varias bases de datos y hacer que funcionen juntos, tenga cuidado con la configuración de la conexión.

También permite el uso de diferentes tipos de bases de datos en la misma aplicación si así lo requiere.

Conexión predeterminada En config/database.php , puede ver la llamada al elemento de configuración:

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

Este nombre hace referencia al nombre mysql las conexiones a continuación:

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

Si no mencionó el nombre de la conexión de la base de datos en otros códigos o comandos, Laravel seleccionará el nombre de la conexión de la base de datos predeterminada. sin embargo, en varias conexiones de base de datos, incluso si configura la conexión predeterminada, es mejor que configure en todas partes qué conexión de base de datos utilizó.

Archivo de migración

En el archivo de migración, si se trata de una conexión de base de datos única, puede utilizar:

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

En la conexión de varias bases de datos, utilizará el método connection() para indicar a Laravel qué conexión de base de datos usa:

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

Migrar Artesanalmente

Si usa una conexión de base de datos única, ejecutará:

php artisan migrate

Sin embargo, para la conexión de varias bases de datos, es mejor que sepa qué conexión de base de datos mantiene los datos de migración. por lo que ejecutará el siguiente comando:

php artisan migrate:install --database=sqlite

Este comando instalará la tabla de migración en la base de datos de destino para preparar la migración.

php artisan migrate --database=sqlite

Este comando ejecutará la migración y guardará los datos de la migración en la base de datos de destino

php artisan migrate:rollback --database=sqlite

Este comando revertirá la migración y guardará los datos de la migración en la base de datos de destino

Modelo elocuente

Para especificar una conexión de base de datos utilizando Eloquent, debe definir la propiedad $connection :

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

Para especificar otra (segunda) conexión de base de datos usando Eloquent:

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

Laravel utilizará la propiedad $connection definida en un modelo para utilizar la conexión especificada definida en config/database.php . Si la propiedad $connection no está definida en un modelo, se utilizará el valor predeterminado.

También puede especificar otra conexión utilizando el método estático on :

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

Base de datos / Generador de consultas

También puede especificar otra conexión utilizando el generador de consultas:

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

Prueba de unidad

Laravel proporciona seeInDatabase($table,$fielsArray,$connection) para probar el código de conexión de la base de datos. En el archivo de prueba de unidad, debe hacer como:

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

De esta manera, Laravel sabrá qué conexión de base de datos probar.

Transacciones de base de datos en prueba unitaria

Laravel permite a la base de datos revertir todos los cambios durante las pruebas. Para probar múltiples conexiones de base de datos, necesita establecer propiedades de $connectionsToTransact

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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow