Phpmyadminと新しいテーブルに新しいデータベースを作成します。
それから
public function next(Request $request){
$langs = DB::connection('mydb')->select('select * from lang');
}
そして得る
Database [compgen] not configured.
私の.envで
DB_Host=localhost
DB_DATABASE=test
DB_USERNAME=root
DB_PASSWORD=123
私のconfig/database.phpで
'mysql' => [
'driver' => 'mysql',
'Host' => env('DB_Host', 'localhost'),
'database' => env('DB_DATABASE', 'test'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', '123'),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => 'test_',
'strict' => false,
],
単一の接続を使用しているため、指定する必要はありません。
_$langs = DB::table('lang')->get();
_
connection()
メソッドは、 複数のDB接続 で作業している場合にのみ使用してください。
私の場合、2つのdb接続を使用しましたが、2番目に追加されたものはキャッシュされませんでした。コマンド呼び出しphp artisan config:cache
はトリックを行いました。
何が起こっているのかを確認するには、$connections
メソッドでDatabaseManager->configure
変数を出力するだけで十分です。
私の場合、それは悪いデータベースのユーザー名でした。 config/database.phpと.envファイルで設定しましたが、一方は他方とは異なりました。検索時にこのスレッドが見つかりました。これは誰かを助けるかもしれないと思いました。
誰もがこれにつまずく-Laravel 5.4以降を使用している場合、config/database.php
で新しいデータベース接続をセットアップできます。
'mysql_test' => [
'driver' => 'mysql',
'Host' => env('DB_Host', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE_TEST', 'forge'),
'username' => env('DB_USERNAME_TEST', 'forge'),
'password' => env('DB_PASSWORD_TEST', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => false,
'modes' => [
'ONLY_FULL_GROUP_BY',
'STRICT_TRANS_TABLES',
'NO_ZERO_IN_DATE',
'NO_ZERO_DATE',
'ERROR_FOR_DIVISION_BY_ZERO',
'NO_AUTO_CREATE_USER',
'NO_ENGINE_SUBSTITUTION',
],
'engine' => null,
],
3つの新しいenv
変数DB_USERNAME_TEST
、DB_PASSWORD_TEST
、DB_DATABASE_TEST
を作成しました
.env
を次のように編集します
DB_DATABASE_TEST=test_db
DB_USERNAME_TEST=local
DB_PASSWORD_TEST=localpassword
構成が更新されていることを確認してください:php artisan config:cache
次のように、新しいテストデータベースでデータベースの移行を実行できるはずです。
php artisan migrate:refresh --database=mysql_test