2017-09-06 64 views
1

我使用Laravel 5.5,我需要動態地更改數據庫,
例如,有兩個數據庫,db1db2,還有每個數據庫中的表articlesLaravel:未定義指數:司機

現在我想從db1複製文章db2

.env文件,當前數據庫是db1

DB_DATABASE=db1 

我想複製記錄時,動態地改變它,我試着做它是這樣的:

public function test() 
{ 
    $articles=Article::all(); 

    Config::set("database.connections.mysql", [ 
     "host" => "127.0.0.1", 
     "database" => "db2", 
     "username" => "root", 
     "password" => "" 
    ]); 
    //DB::purge('mysql'); //this line exists or not,it has the same error. 
    DB::table('articles')->insert($articles); 
    dd('ok'); 
} 

但有一個錯誤:

Undefined index: driver

我有很多數據庫,所以我不想在.env文件中更改它。
我該怎麼辦?

更新:

config/database.php它有兩個項目:

'default' => env('DB_CONNECTION', 'mysql'), 

'connections' => [ 

    'mysql' => [ 
     'driver' => 'mysql', 
     'host' => env('DB_HOST', '127.0.0.1'), 
     'port' => env('DB_PORT', '3306'), 
     'database' => env('DB_DATABASE', 'forge'), 
     'username' => env('DB_USERNAME', 'forge'), 
     'password' => env('DB_PASSWORD', ''), 
     'unix_socket' => env('DB_SOCKET', ''), 
     'charset' => 'utf8mb4', 
     'collation' => 'utf8mb4_unicode_ci', 
     'prefix' => '', 
     'strict' => true, 
     'engine' => null, 
    ], 

], 

,我嘗試

Config::set("database.connections.mysql", [ 
     'mysql' => [ 
      "host" => "127.0.0.1", 
      "database" => "db2", 
      "username" => "root", 
      "password" => "" 
     ] 
    ]); 

錯誤依然存在。

+0

你有沒有在** config/database.php **中檢查''default'=> env('DB_CONNECTION','mysql')'? –

+0

@Sagar Gautam它有這個項目。 – zwl1619

+0

一種方法是使用DB :: connection()創建與數據庫的新連接。 –

回答

2

錯誤是因爲您在配置中缺少driver

更改連接的更好方法是將新連接註冊到數據庫配置文件中,並在運行時更改連接。

'connections' => [ 

    'mysql' => [ 
     'driver' => 'mysql', 
     'host' => env('DB_HOST', '127.0.0.1'), 
     'port' => env('DB_PORT', '3306'), 
     'database' => env('DB_DATABASE', 'forge'), 
     'username' => env('DB_USERNAME', 'forge'), 
     'password' => env('DB_PASSWORD', ''), 
     'unix_socket' => env('DB_SOCKET', ''), 
     'charset' => 'utf8mb4', 
     'collation' => 'utf8mb4_unicode_ci', 
     'prefix' => '', 
     'strict' => true, 
     'engine' => null, 
    ], 

    'newConnection' => [ 
     'driver' => 'mysql', 
     'host' => env('DB_HOST', '127.0.0.1'), 
     'port' => env('DB_PORT', '3306'), 
     'database' => 'db2', 
     'username' => env('DB_USERNAME', 'forge'), 
     'password' => env('DB_PASSWORD', ''), 
     'unix_socket' => env('DB_SOCKET', ''), 
     'charset' => 'utf8mb4', 
     'collation' => 'utf8mb4_unicode_ci', 
     'prefix' => '', 
     'strict' => true, 
     'engine' => null, 
    ], 
] 

現在您可以使用您用來定義新連接的名稱來更改連接。

更改默認的連接

Config::set('database.default', 'newConnection'); 
DB::reconnect('newConnection'); 

或更改查詢生成器

DB::connection('newConnection')->table('articles')->insert($articles); 

,或者如果您使用的是雄辯的模型,你可以設置使用的connection模型相關的默認連接的連接物業

protected $connection = 'newConnection'; 

或更改a通過調用setConnection

(new User)->setConnection('newConnection'); 

如果你想改變當前連接的詳細信息,如你所願

Config::set('database.connections.mysql.database', 'db2'); 

你可以改變他們,你需要調用

DB::reconnect('mysql'); 

或變更T後運行

DB::purge('mysql'); 
+0

'Config :: set('database.connections.mysql.database','db2');'它的工作原理。 – zwl1619

1
public function test() 
{ 
    $articles=Article::all(); 

    Config::set("database.connections.mysql", [ 
     "driver" => "mysql" 
     "host" => "127.0.0.1", 
     "database" => "db2", 
     "username" => "root", 
     "password" => "" 
    ]); 
    //DB::purge('mysql'); //this line exists or not,it has the same error. 
    DB::table('articles')->insert($articles); 
    dd('ok'); 
} 

你失蹤司機,因爲laravel需要你想使用的驅動程序的數據庫,只要您使用database.connection.mysql它將設置值數組中,但仍然需要司機

as for example 


'mysql' => [ 
      'driver' => 'mysql', 
      'host' => env('DB_HOST', '127.0.0.1'), 
      'port' => env('DB_PORT', '3306'), 
      'database' => env('DB_DATABASE', 'forge'), 
      'username' => env('DB_USERNAME', 'forge'), 
      'password' => env('DB_PASSWORD', ''), 

     ], 
+0

我不明白。defalut配置文件有''驅動程序'=>'mysql'',看到我的更新。 – zwl1619

+0

您正在親自放置bro,因此您需要傳遞數組鍵值對。 – Exprator

+0

我有很多數據庫。假設我有200個數據庫,因此我將添加200個項目。我不想這樣做。 – zwl1619