php artisan migrate忽略数据库的本地环境目录中的设置

php artisan migrate忽略数据库的本地环境目录中的设置,php,database-migration,homestead,laravel-4.2,Php,Database Migration,Homestead,Laravel 4.2,自从我尝试使用Homestead作为我的开发环境以来,我在Laravel4.2迁移中遇到了一个奇怪的问题。当我做一个 php artisan migrate我收到以下错误: [PDOException] SQLSTATE[HY000] [1045] Access denied for user 'prod'@'localhost' (using password: YES) Laravel正在使用我的生产环境中的数据库设置,尽管Laravel检测到了正确的环境: $

自从我尝试使用Homestead作为我的开发环境以来,我在Laravel4.2迁移中遇到了一个奇怪的问题。当我做一个
php artisan migrate
我收到以下错误:

[PDOException]           
SQLSTATE[HY000] [1045] Access denied for user 'prod'@'localhost' (using password: YES)  
Laravel正在使用我的生产环境中的数据库设置,尽管Laravel检测到了正确的环境:

$ php artisan env
Current application environment: local
相应的database.php也已就位:

$ cat app/config/local/database.php 
<?php

return array(

[...]    
    'connections' => array(

        'mysql' => array(
            'driver'    => 'mysql',
            'host'      => 'localhost',
            'database'  => 'homestead',
            'username'  => 'homestead',
            'password'  => 'secret',
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
            'strict'    => true,
        ),
[...]
    ),

);
$cat app/config/local/database.php

我可以在错误消息中看到您的用户名是
prod
。所以,你应该使用这个:

'username'  => 'prod',
'password'  => 'your_password',

注意:编辑
数据库.php
是一种硬编码。如果您将项目上传到
github
,则可以看到此文件。我总是喜欢使用
.env
进行数据库和电子邮件配置。

尝试在.env文件中设置值,而不是将它们硬编码到database.php中。然后在database.php mysql数组中使用常量。它看起来像这样:

'mysql' => [
        'driver'    => 'mysql',
        'host'      => env('DB_HOST', 'localhost'),
        'database'  => env('DB_DATABASE', 'forge'),
        'username'  => env('DB_USERNAME', 'forge'),
        'password'  => env('DB_PASSWORD', ''),
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
        'strict'    => false,
    ],

我当然会先发表评论,但我没有足够强大的代表。对不起。

如果有人仍在寻找这个答案,那么问题评论中说明的问题与.env文件的使用有关。在Laravel 4.2中,最简单的解决方案是在应用程序目录中使用以下格式的.env.local.php文件:


我不知道,在文档中找不到关于.env文件的任何内容。请注意,我说的是Laravel 4.2(不是5.2,你的路就是你的路),根据文档,创建一个带有相应名称的目录,并覆盖此目录中的设置(请参阅),如果你不理解,请暂时忽略
.env
。请在
database.php
中提供正确的
用户名
密码
,作为我的答案。我确实了解.env的工作原理。但这种配置在Laravel 4.2中不存在。我在
/app/config/local/database.php
(对于我的本地开发环境)和
/app/config/database.php
中为数据库提供了正确的用户名和密码。更改
/app/config/database.php
中的设置没有意义,因为这会破坏我的生产环境。这里的问题是:为什么Laravel忽略了我在
/app/config/local/database.php
中的重写?您的错误消息是,您的用户名是
prod
,主机名是
localhost
,并且您有密码。另一方面,在您的配置中,您的用户名是
homestad
,主机名是
localhost
,密码是
homestad
。我可以看到您的用户名与主机的用户名不匹配,不知道密码,因为它没有显示。我知道Laravel 5.2中的.env配置,但不知道4.2中的配置。根据Docs()创建一个包含环境名称和覆盖设置的目录,在这个版本中有方法,还是我遗漏了什么?