我想有時連接到另一個數據庫。Laravel 4 - 連接到其他數據庫
我用數據庫連接數據創建了一個config.php。
但我怎麼能告訴laravel連接到這個數據庫insted使用config/database.php?
例如,使用Schema
類時。
由於沒有人似乎明白我想要什麼。
我不想使用config/database.php,我想在不同的位置使用不同的配置文件。
我想有時連接到另一個數據庫。Laravel 4 - 連接到其他數據庫
我用數據庫連接數據創建了一個config.php。
但我怎麼能告訴laravel連接到這個數據庫insted使用config/database.php?
例如,使用Schema
類時。
由於沒有人似乎明白我想要什麼。
我不想使用config/database.php,我想在不同的位置使用不同的配置文件。
這聽起來像你想通了。無論如何,對於其他進來的人來說,我會如何實現它,或者萬一有用的東西在你身上。
第一個,在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' => '',
),
),
);
二,在你的代碼,你可以使用(如前所述)第2連接,你想:
Schema::connection('mysql2')->create('users', function($table) {})
還有更多的文檔在這一點 - 看到Accessing Connections。
Eloquent ORM 您可以在eloquent類中定義變量「connection」來設置使用哪個連接。這在Basic Usage部分中提到。
請參閱here on Github上的變量以及您可以設置爲動態設置連接的方法here。
編輯 OP已經明確表示他們不希望使用config/database.php文件進行配置。
但是,如果沒有進一步解釋,我不能發表評論。我很樂意提供幫助 - 聽起來好像知道爲什麼 config/database.php文件不能/不應該被使用,因爲這可以幫助我們確定問題並創建一個有用的解決方案。
請記住,Laravel 4實際上是一個組件集合,您可以單獨使用這些組件。
https://github.com/illuminate/database
這裏有,展示瞭如何用膠囊類交互的示例工作:
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();
這是一串引導,你需要運行的,所以將它保存起來在某個功能或方法的某處。
但是,它絕對有可能。
有一個更簡單的解決方案。如果你使用的是Larave 4,那麼這個選項對我來說很有用。最近他們添加了可以在模型中指定的$ table變量。請參閱this link。
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指定,但我創建了一個模型,它想要在同一個MySQL主機上訪問DB2。所以這是一個快速和骯髒的方式來實現這一點。
現在我並沒有完全利用雄辯的ORM,所以這個「黑客」可能不適用於多對多或一對多的雄辯方法。
彼此的想法,我有,但我並沒有想在DB1和內部的程序,我可以通過查詢此鏈接訪問DB2表的創建存儲過程(常規):
SELECT * from db2.mytable where id = 1;
如果您對有/可以擁有相同的用戶訪問這兩個數據庫感到滿意,這是一個非常漂亮優雅的解決方案。 – voidstate
編輯bootstrap/start.php
文件並添加您的機器名稱(打開終端:hostname
)。
你的機器添加到$ ENV,
$env = $app->detectEnvironment(array(
'mymachine' => array('mymachine.local'),
));
'app/config/mymachine'
database.php
一個副本,新的配置PARAMS。要在其他地方使用的配置文件,說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
是在你的應用程序的src/config
目錄一個簡單的PHP文件返回一個包含元素connections
這是數據庫的一個數組的數組屬性。
你可以告訴Laravel通過使用外部配置文件:
Config::set("database.connections.test", $this->dbConfig);
DB::connection("test");
我相信你想實現某種形式的地方數據庫將被動態創建的邏輯分片。
在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');
查詢生成器的櫃面你可以做
$DB = DB::connection('DB_CONFIG_NAME');
現在使用$DB->select()
進行查詢。
希望這將幫助開發者尋找一個可能的解決方案對於這個問題
這似乎不適用於Laravel 5.2,DatabaseManager.php:239拋出異常'Database [database.connections.DB_CONFIG_NAME]'not configured。'我也試過App :: make('config') - > set('database.connections.DB_CONFIG_NAME',$ conn)',結果相同。任何想法? –
對不起,我的錯。我錯過了簡單的事實,即稍後在引用配置的連接時不需要'database.connections.'前綴。出於某種原因,錯誤信息完全讓我失望。 –
既然你不給任何特定代碼爲「端口」,看看[這裏](http://forums.laravel.io /viewtopic.php?pid=6387)以防它回答你的問題。 –
什麼代碼?正如我所說我想創建一個額外的config.php與數據庫設置並連接到此。問題是我如何告訴laravel使用config/database.php的配置。 – Michael
鏈接的頁面顯示如何將多個數據庫配置添加到database.php,以及如何選擇使用哪一個來連接/查詢。 –