Laravel数据库配置应优先修改.env文件而非config/database.php,需确认APP_ENV非production、DB_HOST适配环境(如Docker填服务名)、DB_DATABASE手动创建、密码不含特殊字符、SQLite路径可写,并用tinker验证连接。

数据库配置写在 .env 里,不是 config/database.php
很多人一上来就改 config/database.php,结果改了没用——Laravel 默认优先读 .env 文件里的值,config/database.php 只是兜底和拼接逻辑。你改配置,必须先确认 .env 是否生效。
实操建议:
-
APP_ENV=local必须设为local或staging等非production值,否则 Laravel 可能跳过重载.env - 检查
.env文件是否被 Git 忽略(.gitignore里通常有.env),避免误提交或本地没生效 - 改完
.env后运行php artisan config:clear,否则缓存会掩盖修改 -
DB_CONNECTION=mysql要和实际驱动一致;如果用 PostgreSQL,这里得是pgsql,不能只改下面的 host/port
DB_HOST 别填 localhost,Docker 或 Homestead 下大概率连不上
本地开发用 Docker、Valet、Homestead 时,localhost 指的是容器/虚拟机自身,不是宿主机的 MySQL。常见错误现象:启动 API 报错 SQLSTATE[HY000] [2002] Connection refused。
实操建议:
- Docker 环境下,
DB_HOST填服务名,比如mysql(对应docker-compose.yml里 service 的名字) - Homestead/Valet 用
127.0.0.1,而不是localhost(避免 socket 连接干扰) - Mac 上用 MAMP 或 Sequel Ace 直连,确认端口是不是默认的
3306;MAMP 常用8889,这时要同步改DB_PORT=8889 - 密码含特殊字符(如
@、/)会导致 URL 解析失败,用DB_PASSWORD单独配比写进DB_URL更稳
API 项目别漏掉 DB_DATABASE 和迁移前的数据库手动创建
Laravel 不会自动建库,php artisan migrate 报 Database does not exist 就是因为这个。新手常以为“跑 migrate 就行”,结果卡在第一步。
实操建议:
- MySQL 命令行执行
CREATE DATABASE <code>your_db_nameCHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;,别依赖工具点点点 -
DB_DATABASE值必须和你创建的库名完全一致(区分大小写,Linux 下尤其注意) - 用
DB_USERNAME登录 MySQL 控制台,手动执行SHOW DATABASES;验证库是否存在、权限是否够 - 如果用 SQLite,
DB_DATABASE是路径,比如database/database.sqlite,确保目录存在且可写
调试时用 php artisan tinker 直接测连接,比反复启 API 快得多
API 报 500 错误,不一定是路由或控制器问题,很可能是数据库根本没连上。与其看日志猜,不如直接进交互环境验证。
实操建议:
- 运行
php artisan tinker,然后输入DB::connection()->getPdo();—— 成功返回 PDO 实例,失败抛异常,信息比 Web 请求清晰得多 - 如果报
SQLSTATE[HY000] [1045] Access denied,重点查DB_USERNAME和DB_PASSWORD是否输错,空格、换行容易藏在复制粘贴里 - 加
DB_LOG=true到.env,再跑一次tinker+ 查询,就能看到完整 SQL 和绑定参数,方便定位慢查询或字段缺失
环境变量加载顺序、host 解析路径、数据库权限粒度——这些地方没有报错提示,但只要错一个,整个 API 就静默挂掉。配数据库不是填完就完事,得逐层确认每一步的实际效果。


















