当一台机器上的多个Laravel项目或laravel无法读取.env文件时发生冲突数据库

Pan*_*ana 5 php environment-variables laravel laravel-5.1 laravel-5.2

我在Windows 10上使用xampp。我在这台机器上有多个laravel 5.2项目。当我执行Project 1时,它给我以下错误:database_project_1.table_of_project_2表或视图不存在,但是表table_of_project_2存在于中database_project_2。这个问题很少出现。

下面是Project 1 .env文件

APP_ENV=local
APP_DEBUG=true
APP_KEY=base64:ratSluNv930gb3wp1UOabW6Ze3jEJn3ixtTX/wgqYZc=
APP_URL=http://project-1.dev/

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database_project_1
DB_USERNAME=root
DB_PASSWORD=j@yshr33r@m
Run Code Online (Sandbox Code Playgroud)

下面是Project 2 .env文件

APP_ENV=local
APP_DEBUG=true
APP_KEY=base64:XRgQHfYiKPmHtHZ5UbX38KDlBnl/nyBSt+8qnkOISTg=
APP_URL=http://project-2.dev/

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database_project_2
DB_USERNAME=root
DB_PASSWORD=j@yshr33r@m
Run Code Online (Sandbox Code Playgroud)

我已经尝试过以下命令,但没有运气:

  1. php artisan config:clear
  2. php artisan cache:clear

请检查以下屏幕截图: 数据库冲突错误

请让我知道是否缺少任何东西。

这是config/database.php两个项目的代码。

项目1 config/database.php

<?php

return [
    'fetch' => PDO::FETCH_CLASS,
    'default' => env('DB_CONNECTION', 'mysql'),
    'connections' => [
        'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'database_project_1'),
            'username' => env('DB_USERNAME', 'root'),
            'password' => env('DB_PASSWORD', 'j@yshr33r@m'),
            'charset' => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix' => '',
            'strict' => false,
            'engine' => null,
        ],

    ],
    'migrations' => 'migrations',
    'redis' => [
        'cluster' => false,
        'default' => [
            'host' => env('REDIS_HOST', 'localhost'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => 0,
        ],
    ],
];
Run Code Online (Sandbox Code Playgroud)

项目二 config/database.php

<?php

return [
    'fetch' => PDO::FETCH_CLASS,
    'default' => env('DB_CONNECTION', 'mysql'),
    'connections' => [
        'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'database_project_2'),
            'username' => env('DB_USERNAME', 'root'),
            'password' => env('DB_PASSWORD', 'j@yshr33r@m'),
            'charset' => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix' => '',
            'strict' => false,
            'engine' => null,
        ],

    ],
    'migrations' => 'migrations',
    'redis' => [
        'cluster' => false,
        'default' => [
            'host' => env('REDIS_HOST', 'localhost'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => 0,
        ],
    ],
];
Run Code Online (Sandbox Code Playgroud)

看一下代码,让我知道需要什么。

读取.env文件或.env另一个项目的冲突文件是否有问题?

Don*_*nic 4

database_project_1您已指定在项目 2 中使用config/database.php

'database' => env('DB_DATABASE', 'database_project_1'),
Run Code Online (Sandbox Code Playgroud)

因此,如果env('DB_DATABASE')不返回值,database_project_1则将使用默认值。这可能会发生,具体取决于缓存,如以下关于 SO 的几个问题所述:example 1example 2example 3

如果是缓存问题,您可以尝试通过以下某种组合来修复该问题(因安装和版本而异):

php artisan config:clear
php artisan cache:clear
composer dump-autoload
// restart your web server
Run Code Online (Sandbox Code Playgroud)

但最简单的解决办法肯定是在项目 2 中使用正确的默认值config/database.php

'database' => env('DB_DATABASE', 'database_project_2'),
Run Code Online (Sandbox Code Playgroud)

  • @Don'tPanic 感谢您的指点。最后,我的问题得到了解决,因为[这个答案](/sf/ask/3065277701/)我更新了我的项目1环境文件`DB_DATABASE ` 到 `DB_DATABASE1` 并在其配置文件中更新相同的内容。 (2认同)