En .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
En 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'),
],
Nota: En mysql2
caso de DB_username y DB_PASSWORD es el mismo, entonces usted puede utilizar env('DB_USERNAME')
que se metioned en .env
primeras líneas.
Definir conexiones
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' => '',
),
),
);
Esquema
Para especificar qué conexión usar, simplemente ejecute el connection()
método
Schema::connection('mysql2')->create('some_table', function($table)
{
$table->increments('id'):
});
Consultor de construcción
$users = DB::connection('mysql2')->select(...);
Elocuente
Establezca la $connection
variable en su modelo
class SomeModel extends Eloquent {
protected $connection = 'mysql2';
}
También puede definir la conexión en tiempo de ejecución mediante el setConnection
método o el on
método estático:
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;
}
}
Nota ¡ Tenga cuidado al intentar construir relaciones con tablas en bases de datos! Es posible hacerlo, pero puede venir con algunas advertencias y depende de qué configuración de base de datos y / o base de datos tenga.
Usar múltiples conexiones de base de datos
Al usar varias conexiones, puede acceder a cada una a connection
través del método de conexión en la DB
fachada. Lo que se name
pasa al connection
método debe corresponder a una de las conexiones enumeradas en su config/database.php
archivo de configuración:
$users = DB::connection('foo')->select(...);
También puede acceder a la instancia de PDO subyacente sin procesar utilizando el método getPdo en una instancia de conexión:
$pdo = DB::connection()->getPdo();
Enlaces útiles
- Laravel 5 conexión de base de datos múltiple DESDE
laracasts.com
- Conecte múltiples bases de datos en laravel FROM
tutsnare.com
- Múltiples conexiones de base de datos en Laravel FROM
fideloper.com
class SomeModel extends Model {
y también asegurarse de haber eliminado los valores de obtención del archivo env comoenv('DB_DATABASE', 'name')
cuando crea una nueva matriz de configuración de DB en el archivo database.php como @sba ha mencionadoEn Laravel 5.1, especifica la conexión:
Por defecto, Laravel usa la conexión por defecto. Es simple, ¿no es así?
Lea más aquí: http://laravel.com/docs/5.1/database#accessing-connections
fuente
En realidad,
DB::connection('name')->select(..)
no funciona para mí, porque 'nombre' tiene que estar entre comillas dobles: "nombre"Aún así, la consulta de selección se ejecuta en mi conexión predeterminada. Aún tratando de descubrir cómo convencer a Laravel para que funcione de la manera prevista: cambie la conexión.
Editar: lo descubrí. Después de depurar Laravels DatabaseManager resultó que mi database.php (archivo de configuración) (dentro de $ this-> app) estaba mal. En la sección "conexiones" tenía cosas como "base de datos" con valores de la copia. En términos claros, en lugar de
Necesitaba colocar algo como
dado que todas las conexiones se enumeraron con los mismos valores para la base de datos, nombre de usuario, contraseña, etc., lo que por supuesto tiene poco sentido si quiero acceder al menos a otro nombre de base de datos
Por lo tanto, cada vez que quería seleccionar algo de otra base de datos, siempre terminaba en mi base de datos predeterminada
fuente
Laravel tiene soporte incorporado para múltiples sistemas de bases de datos, debe proporcionar detalles de conexión en el archivo config / database.php
Una vez que tenga esto, puede crear dos clases de modelo base para cada conexión y definir el nombre de la conexión en esos modelos
Puede ampliar estos modelos para crear más modelos para tablas en cada DB.
fuente