Laravel 4 – Подключение к другой базе данных

Иногда я хочу подключиться к другой базе данных.

Я создал config.php с данными подключения к базе данных.

Но как я могу сказать laravel, чтобы подключиться к этой базе данных, используя config / database.php?

Например, при использовании класса Schema .

Поскольку никто, кажется, не понимает, чего я хочу.

Я НЕ хочу использовать config / database.php, я хочу использовать другой файл конфигурации в другом месте.

Related of "Laravel 4 – Подключение к другой базе данных"

Похоже, вы поняли это. Вот как я мог бы это сделать в любом случае для других людей, приезжающих, или в случае, если что-то полезное здесь для вас.

Сначала добавьте второе соединение в app/config/database.php . Примечание. Этот путь к файлу может меняться в зависимости от вашей среды.

 <?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' => '', ), ), ); 

Во-вторых , в вашем коде вы можете использовать (как упоминалось) второе соединение, в котором вы хотели бы:

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

Там есть дополнительная документация – см. Доступ к соединениям .

Eloquent ORM Вы можете определить переменную для «соединения» в классе eloquent, чтобы установить, какое соединение используется. Это отмечено в разделе « Основное использование ».

См. Эту переменную здесь в Github и метод, который вы можете установить для динамического установления соединения здесь .

Редактировать В OP ясно сказано, что они не хотят использовать файл config / database.php для конфигурации.

Однако, не объясняя, я не могу комментировать. Я рад помочь – похоже, было бы полезно узнать, почему файл config / database.php не может / не должен использоваться, поскольку это может помочь нам выяснить проблему и создать полезное решение.

Помните, что Laravel 4 на самом деле представляет собой набор компонентов, и вы можете использовать эти компоненты соло.

https://github.com/illuminate/database

Здесь приведен пример, который показывает, как работает взаимодействие с классом 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(); 

Это куча начальной загрузки, которую вам нужно запустить, поэтому уберите ее где-нибудь в функции или методе.

Но, это абсолютно возможно.

Я считаю, что вы хотите реализовать какой-то логический осколок, когда базы данных будут динамически создаваться.

В таком сценарии в laravel вы можете динамически добавлять конфигурацию базы данных, например, ниже

 $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); 

Теперь подключиться через красноречивый

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

Incase Query Builder, который вы можете сделать

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

используйте $DB->select() для запроса сейчас.

Надеюсь, это поможет разработчикам найти возможное решение этого вопроса

Существует более простое решение. Если вы используете Larave 4, есть опция, которая сработала для меня. Недавно они добавили переменную $ table, которую вы можете указать в своей модели. См. Эту ссылку .

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

Если вы используете MySQL, вы можете сделать следующее:

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

Если вы используете SQL Server, вы можете сделать это:

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

В моем файле конфигурации был указан DB1, но я создал модель, которая хочет получить доступ к DB2 на том же хосте MySQL. Так что это был быстрый и грязный способ сделать это.

Теперь я не полностью использую Eloquent ORM все время, поэтому этот «взломать» может не работать с многими из многих или с одним из многих методов «Красноречивого».

Еще одна идея, которую я имел, но я на самом деле не пытался создать хранимую процедуру (процедуру) в DB1 и внутри этой процедуры, я могу получить доступ к таблицам DB2, запросив ссылку:

 SELECT * from db2.mytable where id = 1; 

Чтобы использовать файл конфигурации в другом месте, скажем, 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']; 

Где dbInfo – это простой php-файл в каталоге src/config вашего приложения, возвращающий массив, содержащий connections с элементами, которые являются массивом свойств базы данных.

Вы можете указать Laravel использовать внешний файл конфигурации, используя:

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

Измените файл bootstrap/start.php и добавьте имя машины (open terminal: hostname ).

Добавьте свою машину в $ env,

 $env = $app->detectEnvironment(array( 'mymachine' => array('mymachine.local'), )); 
  1. Создайте новый путь в 'app/config/mymachine'
  2. Добавьте копию database.php с новыми параметрами конфигурации.