使用 artisan 迁移时流明错误

Lumen error when using artisan migrate

我是 Lumen 的新手,当我尝试使用时:

php artisan migrate 

我收到以下错误。

[PDOException]                                    
SQLSTATE[HY000] [2002] No such file or directory  

如果我将 'localhost' 更改为“127.0.0.1”,我会收到此错误:

[PDOException]                             
SQLSTATE[HY000] [2002] Connection refused

如果我使用:

php artisan migrate --database=Lumen

我得到:

[InvalidArgumentException]        
Database [Lumen] not configured.

这是我的 .env 文件

DB_CONNECTION=mysql
DB_HOST=localhost 
DB_PORT=3306
DB_DATABASE=Lumen
DB_USERNAME=root
DB_PASSWORD=root

我已经阅读了有关堆栈溢出的其他问题并尝试了解决方案,即配置 php 版本并检查 mysql.sock 的路径,一切正常。我使用的是完整路径,我的 PHP 版本是正确的。

我正在使用 MAMP 并有一个名为 'Lumen' 的数据库(目前没有表)。

使用终端创建迁移:

php artisan make:migration --create=items create_items_table  

我正在使用phpartisan服务(服务器8000)查看我的项目,我可以查看。

MAMP is on:
apache=80
nginx=80
mysql=3306

我对我的 Laravel 项目使用了相同的配置,并且工作正常。但是 laravel 确实有一个 database.php 文件,里面有所有的细节。

我希望这些信息足够了,如有任何帮助,我们将不胜感激!

提前致谢

编辑:这是我的 app.php 文件,其余部分保持不变。

require_once __DIR__.'/../vendor/autoload.php';

Dotenv::load(__DIR__.'/../');


$app = new Laravel\Lumen\Application(
realpath(__DIR__.'/../')
);

$app->withFacades();
$app->withEloquent();

您是否可能忘记启用 dotenv 变量?在您的 bootstrap/app.php 文件中,您可以通过取消注释以下行来启用环境变量:

Dotenv::load(__DIR__.'/../');

Lumen Documentation about databases

折腾了很久,终于找到答案了。

问题出在 MAMP 上,mysql 的 pdo 套接字不在 php.ini 文件中,必须包含在那里。

[Pdo_mysql]
; If mysqlnd is used: Number of cache slots for the internal result set cache
; http://php.net/pdo_mysql.cache_size
pdo_mysql.cache_size = 2000

; Default socket name for local MySQL connects.  If empty, uses the built-in
; MySQL defaults.
; http://php.net/pdo_mysql.default-socket
pdo_mysql.default_socket=

包括该行解决了我所有的问题。

对于尝试 Lumen 的新手们,经过 3 个悲伤的小时,我终于解决了这个问题。不是你,是MAMP!

一直以来,MAMP 都没有为 Web 和 mysql 使用默认端口 80 和 3306。所以点击那个按钮。就这样!我很快就会在我的博客上发布这个 :D

如果您在 macOS 上使用 MAMP,您只需将此代码添加到您的 .env 文件中:

DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock

而且您不需要修改任何 MAMP 的配置。