web-dev-qa-db-fra.com

Base de données [] non configurée Laravel 5

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,
    ],
5
Viktor

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 .

4
Alexey Mezenin

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.

3
Arthur Kushman

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 envDB_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

1
jsonUK

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.

1
Andrew Fox