sirve que para for example content ciclo php laravel laravel-4

php - que - Laravel 4-Conectar a otra base de datos



para que sirve el yield laravel (6)

Deseo conectarme a otra base de datos a veces.

Creé un config.php con los datos de conexión de la base de datos.

Pero, ¿cómo puedo decirle a laravel que se conecte a esta base de datos en lugar de usar config / database.php?

Por ejemplo, cuando se usa la clase de Schema .

Ya que nadie parece entender lo que quiero.

NO QUIERO usar config / database.php, quiero usar un archivo de configuración diferente en una ubicación diferente.


Creo que desea implementar algún tipo de combinación lógica donde las bases de datos se crearían dinámicamente.

En tal escenario en laravel puede agregar dinámicamente una configuración de base de datos, como a continuación

$conn = array( ''driver'' => ''mysql'', ''host'' => ''localhost'', ''database'' => ''DATABASE'', ''username'' => ''USERNAME'', ''password'' => ''SOME_PASSWORD'', ''charset'' => ''utf8'', ''collation'' => ''utf8_unicode_ci'', ''prefix'' => '''', ); Config::set(''database.connections.DB_CONFIG_NAME'', $conn);

Ahora para conectarse vía elocuente

MODEL::on(''DB_CONFIG_NAME'')->WHAT_EVER(''1'');

En caso de Query Builder puedes hacer

$DB = DB::connection(''DB_CONFIG_NAME'');

use $DB->select() para consultar ahora.

Espero que esto ayude a los desarrolladores a buscar una posible solución para esta pregunta


Edite el archivo bootstrap/start.php y agregue el nombre de su máquina (terminal abierto: hostname ).

Agregue su máquina a $ env,

$env = $app->detectEnvironment(array( ''mymachine'' => array(''mymachine.local''), ));

  1. Crea una nueva ruta en ''app/config/mymachine''
  2. Agregue una copia de database.php con nuevos parámetros de configuración.

Hay una solución más simple. Si está usando Larave 4 hay una opción que funcionó para mí. Recientemente agregaron $ table variable que puede especificar en su modelo. Consulte este enlace .

class User extends Eloquent { protected $table = ''my_users''; }

Si está utilizando MySQL, puede hacer lo siguiente:

class User extends Eloquent { protected $table = ''mydbname.my_users''; }

Si está utilizando SQL Server, puede hacer esto:

class User extends Eloquent { protected $table = ''mydatabase..my_users''; }

Mi archivo de configuración tenía DB1 especificado, pero creé un modelo que quiere acceder a DB2 en el mismo host MySQL. Así que esta fue una manera rápida y sucia de lograr esto.

Ahora no aprovecho completamente Eloquent ORM todo el tiempo, por lo que este "truco" puede no funcionar con Muchos a muchos o uno a muchos métodos Elocuentes.

Otra idea que tenía pero que en realidad no probé fue crear un procedimiento almacenado (rutina) en DB1 y dentro de esa rutina puedo acceder a las tablas de DB2 consultando este enlace:

SELECT * from db2.mytable where id = 1;


Para usar un archivo de configuración en otra ubicación, diga src/config :

use Config; $this->dbConfig = Config::get(''appname::dbInfo.connections.test''); $this->database = $this->dbConfig[''database'']; $this->username= $this->dbConfig[''username'']; $this->password= $this->dbConfig[''password''];

Donde dbInfo es un archivo php simple en el directorio src/config su aplicación que devuelve una matriz que contiene las connections elemento que es una matriz de propiedades de base de datos.

Puedes decirle a Laravel que use un archivo de configuración externo usando:

Config::set("database.connections.test", $this->dbConfig); DB::connection("test");


Parece que lo descubriste. Así es como lo lograría de todas formas para otras personas que entran, o en caso de que algo útil esté aquí para ti.

Primero , agregue una segunda conexión en app/config/database.php . Nota: La ruta del archivo puede cambiar dependiendo de su entorno.

<?php return array( ''connections'' => array( ''mysql'' => array( ''driver'' => ''mysql'', ''host'' => ''localhost'', ''database'' => ''database1'', ''username'' => ''user1'', ''password'' => ''pass1'' ''charset'' => ''utf8'', ''collation'' => ''utf8_unicode_ci'', ''prefix'' => '''', ), ''mysql2'' => array( ''driver'' => ''mysql'', ''host'' => ''localhost'', ''database'' => ''database2'', ''username'' => ''user2'', ''password'' => ''pass2'' ''charset'' => ''utf8'', ''collation'' => ''utf8_unicode_ci'', ''prefix'' => '''', ), ), );

Segundo , en su código, puede usar (como se mencionó) la 2da conexión donde le gustaría:

Schema::connection(''mysql2'')->create(''users'', function($table) {})

Hay más documentación sobre esto - ver Acceso a Conexiones .

ORM Eloquent Puede definir la variable para "conexión" en una clase elocuente para establecer qué conexión se utiliza. Eso se menciona en la sección Uso básico .

Vea esa variable aquí en Github y el método que puede configurar para establecer la conexión de forma dinámica here .

Editar El OP ha dejado en claro que no desean usar el archivo config / database.php para config.

Sin embargo, sin explicar más, no puedo comentar. Me complace ayudar - parece que sería útil saber por qué el archivo config / database.php no puede / no debe ser utilizado, ya que esto puede ayudarnos a determinar el problema y crear una solución útil.


Recuerde que Laravel 4 es en realidad una colección de componentes, y puede usar estos componentes solo.

https://github.com/illuminate/database

Aquí hay un ejemplo que muestra cómo funciona la interacción con la clase Capsule:

use Illuminate/Database/Capsule/Manager as Capsule; $capsule = new Capsule; $capsule->addConnection([ ''driver'' => ''mysql'', ''host'' => ''localhost'', ''database'' => ''database'', ''username'' => ''root'', ''password'' => ''password'', ''charset'' => ''utf8'', ''collation'' => ''utf8_unicode_ci'', ''prefix'' => '''', ]); // Set the event dispatcher used by Eloquent models... (optional) use Illuminate/Events/Dispatcher; use Illuminate/Container/Container; $capsule->setEventDispatcher(new Dispatcher(new Container)); // Set the cache manager instance used by connections... (optional) $capsule->setCacheManager(...); // Make this Capsule instance available globally via static methods... (optional) $capsule->setAsGlobal(); // Setup the Eloquent ORM... (optional; unless you''ve used setEventDispatcher()) $capsule->bootEloquent();

Este es un montón de bootstrapping que necesitarás ejecutar, así que guárdalo en algún lugar de una función o método.

Pero, es absolutamente posible.