2017-03-20 3 views
1

Ich möchte einige Daten in meine Datenbank einpflegen. Bisher funktioniert alles mit der "normalen" Datenbank.artisan db: seed --database funktioniert nicht

Jetzt möchte ich die gleichen Daten auf Saatgut (das gleiche Seeder) in eine andere Datenbank läuft. Also versuche ich den --database= Befehl verwenden

php artisan db:seed --database=cb4test --class=TestDataTableSeeder -v 

Aber das wird die Daten in die „normale“ Datenbank, nicht in dem angegebenen in cb4test Saatgut. Was mache ich falsch?

Weitere Informationen:

Dies ist ein Teil meines config/database.php:

'connections' => [ 

    'couchbase' => [ 
     'driver' => 'couchbase', 
     'host'  => env('DB_HOST', 'localhost'), 
     'port'  => env('DB_PORT', 8091), 
     'bucket' => env('DB_DATABASE'), 
     'username' => env('DB_USERNAME'), 
     'n1ql_hosts' => [ 
      'http://'.env('DB_HOST', 'localhost').':8093' 
     ] 
    ], 

    'cb4test' => [ 
     'driver' => 'couchbase', 
     'host'  => env('DB_HOST', 'localhost'), 
     'port'  => env('DB_PORT', 8091), 
     'bucket' => env('DB_TEST', 'msg4test'), 
     'username' => env('DB_USERNAME'), 
     'n1ql_hosts' => [ 
      'http://'.env('DB_HOST', 'localhost').':8093' 
     ] 
    ], 

In meinem .env ich tue einen Eintrag für DB_TEST auf den richtigen Couchbase-Eimer zeigt (in mysql, die eine mysql wären -Tabelle).

Immer noch, das funktioniert nicht. Ich habe eine Debug-Zeile in meinem TestDataTableSeeder.php, die meine aktuell verwendete DB-Tabelle gibt und das ist die in der Standard-Verbindung (genannt couchbase) verwendet, nicht die in der Verbindung 'cb4test' verwendet.

Mit Laravel 5.4

+0

Haben definieren Sie eine korrekte Verbindung zum cb4test Datenbank? –

+0

Ja, eine Verbindung ist konfiguriert und funktioniert.Wenn ich in --database einen Tippfehler mache, erhalte ich einen Fehler, also schaut laravel in die 'config/database.php', wenn diese Verbindung vorhanden ist, aber sie wird sie nicht benutzen. – Paladin

+1

Können Sie Proben von Seeder-Klassen teilen? Vielleicht definieren Sie eine bestimmte Datenbank in Seeder –

Antwort

1

Sein verbreiteter Irrtum, gibt --database die Datenbankverbindung nicht der Name.

Also in Ihrem config \ database.php Datei benötigen Sie eine Verbindung addieren, die diese verschiedenen Datenbank verwendet wie:

'mysql2' => [ 
      'driver' => 'mysql', 
      'host' => env('DB_HOST', 'localhost'), 
      'port' => env('DB_PORT', '3306'), 
      'database' => env('DB_DATABASE2', 'forge'), 
      'username' => env('DB_USERNAME2', 'forge'), 
      'password' => env('DB_PASSWORD2', ''), 
      'charset' => 'utf8', 
      'collation' => 'utf8_unicode_ci', 
      'prefix' => '', 
      'strict' => false, 
      'engine' => 'InnoDB', 
     ], 

Dann in Ihrem .env definieren drei Variablen für die anderen db:

DB_DATABASE2 = cb4test 
DB_USERNAME2 = //username for cb4test 
DB_PASSWORD2 = //password for cb4test 

Dann nutzen:

php artisan db:seed --database=mysql2 --class=TestDataTableSeeder -v 

ODER

besseren Weg Datenbank zu ändern ist es selbst in Seeder zu ändern. In Ihrem: TestDataTableSeeder.php

use Illuminate\Support\Facades\DB;//at top 

//then inside function: 
DB::disconnect('mysql'); 
config(['database.connections.mysql.database' => env('DB_DATABASE2','')]); 
config(['database.connections.mysql.username' => env('DB_USERNAME','')]); 
config(['database.connections.mysql.password' => env('DB_PASSWORD2','')]); 

Natürlich werden Sie diese drei Variablen von .env Datei intakt müssen.

Ich hoffe, es hilft

+0

Danke für Ihre Antwort. Ich habe schon alle diese Dinge getan (besonders die Verbindung), aber das ist der Punkt, wo ich hierher kam, um auf SO zu fragen. Ich werde nicht arbeiten und ich habe keine Ahnung, warum es nicht funktioniert. – Paladin

+0

ist 'msg4test' Name Ihrer Standarddatenbank? – Learner

0

Also, wir haben herausgefunden, dass die Ursache dieses Problems zu einem Fehler in der Couchbase-Treiber verwandt war.

Fehler behoben, alles funktioniert gut.

Danke für alle Antworten versucht, mir zu helfen: D

Verwandte Themen