plantillas plantilla index gratis for descargar content ciclo bootstrap laravel eloquent codeception

laravel - plantilla - Conmutar dinámicamente la conexión db



laravel foreach index (5)

Para varios comandos de consola, tengo la necesidad de cambiar las bases de datos para que todos mis comandos y consultas elocuentes se ejecuten en la base de datos correcta (y servidor).

He visto algunas soluciones, la más simple parece ser cambiar la configuración así:

$new_connection = [ ''driver'' => ''mysql'', ''host'' => ''127.0.0.1'', ''database'' => ''test_db'', ''username'' => ''test'', ''password'' => ''test'', ''charset'' => ''utf8'', ''collation'' => ''utf8_general_ci'', ''prefix'' => '''', ''strict'' => false ]; config([''database.connections.mysql'' => $new_connection]); DB::purge(''mysql'');

El único problema (que he notado) es cuando intento hacer transacciones, más específicamente, cuando hago transacciones dentro de mis pruebas de aceptación en Codeception, simplemente no funcionan.

Los comandos que uso son:

DB::connection()->beginTransaction(); // inside the _before function

y

DB::connection()->rollBack(); // inside the _after function


Estaba experimentando el problema similar. Para usar la transacción, básicamente necesitarías usar el enfoque de @Sylwit.

Cree las conexiones de base de datos requeridas. Digamos mysql y mysql1 .

Ahora en su controlador obtenga la conexión a la base de datos requerida de la siguiente manera:

$connection = DB::connection(''mysql1''); // replace this to your required connection name

Ahora, para la transacción use la conexión recuperada.

$connection->beginTransaction(); // inside the _before function

Y

$connection->rollBack(); // inside the _after function

O

En su código, simplemente puede agregar el nombre de la conexión:

DB::connection(''mysql1'')->beginTransaction(); // inside the _before function

y

DB::connection(''mysql1'')->rollBack(); // inside the _after function



Si está utilizando phpunit, eche un vistazo a phpunit.xml

en la parte inferior deberías ver lo siguiente

<php> <env name="APP_ENV" value="testing"/> <env name="CACHE_DRIVER" value="array"/> <env name="SESSION_DRIVER" value="array"/> <env name="QUEUE_DRIVER" value="sync"/> </php>

puede asignar la variable env para que se utilice su base de datos de prueba en lugar de la base de datos de producción original.

así que cree dos conexiones, asigne el nombre de la conexión de la base de datos en .env y haga referencia al de prueba en phpunit.xml Good Luck.


Tienes que crear 2 conexiones distintas.

http://fideloper.com/laravel-multiple-database-connections https://laravel.com/docs/5.1/database#accessing-connections

return array( ''default'' => ''mysql'', ''connections'' => array( # Our primary database connection ''mysql'' => array( ''driver'' => ''mysql'', ''host'' => ''127.0.0.1'', ''database'' => ''test_db'', ''username'' => ''test'', ''password'' => ''test'', ''charset'' => ''utf8'', ''collation'' => ''utf8_general_ci'', ''prefix'' => '''', ''strict'' => false ), # Our secondary database connection ''mysql2'' => array( ''driver'' => ''mysql'', ''host'' => ''127.0.0.1'', ''database'' => ''test_db_2'', ''username'' => ''test'', ''password'' => ''test'', ''charset'' => ''utf8'', ''collation'' => ''utf8_general_ci'', ''prefix'' => '''', ''strict'' => false ), ), );

Ahora, cuando quiera consultar debe pasar la conexión que necesita

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

Como el predeterminado se declara como mysql, puede omitirlo.


$config = config()->all(); $config[''database''][''connections''][''mysql''] = $newConnection; Artisan::call(''config:clear''); config($config);

He probado esto y hace el trabajo