Je crée une nouvelle base de données dans phpmyadmin et de nouvelles tables.
Alors je fais
public function next(Request $request){
$langs = DB::connection('mydb')->select('select * from lang');
}
et obtenir
Database [compgen] not configured.
dans mon .env
DB_Host=localhost
DB_DATABASE=test
DB_USERNAME=root
DB_PASSWORD=123
dans mon 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,
],
Vous utilisez une connexion unique, vous n'avez donc pas besoin de la spécifier:
$langs = DB::table('lang')->get();
Vous devez utiliser la méthode connection()
uniquement lorsque vous travaillez avec plusieurs connexions à la base de données .
Dans mon cas, j'ai utilisé 2 connexions à la base de données et le second ajouté n'a pas été mis en cache, l'appel de commande:
php artisan config:cache
Pour voir ce qui se passait, il suffisait de sortir la variable $connections
dans la méthode DatabaseManager->configure
.
Si vous utilisez la méthode Laravel 5.4 ou une version plus récente, vous pouvez configurer une nouvelle connexion à la base de données dans 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,
],
J'ai créé 3 nouvelles variables env
DB_USERNAME_TEST
, DB_PASSWORD_TEST
, DB_DATABASE_TEST
Éditez .env
avec quelque chose comme
DB_DATABASE_TEST=test_db
DB_USERNAME_TEST=local
DB_PASSWORD_TEST=localpassword
Assurez-vous que la configuration est actualisée: php artisan config:cache
Vous devriez pouvoir exécuter une migration de base de données sur votre nouvelle base de test, comme ceci:
php artisan migrate:refresh --database=mysql_test
Dans mon cas, c'était un mauvais nom d'utilisateur de base de données. Je l'avais placé dans mon fichier config/database.php ainsi que dans le fichier .env et l'un d'eux était différent de l'autre. Trouvé ce fil lors de la recherche, pensé que cela pourrait aider quelqu'un.